Introduction to Material Design
"Quantum Paper"
Material Design
If every pixel on the screen somehow lived in a virtual world – what would the rules of that world be like?

- Physical Surfaces
- Light/Shadow
- Elevation
- Motion
- Transformation

Environment
- A world in which all objects have dimension in 3D space (orthographic, not perspective)

- Material has X, Y, and Z dimensionality
- Material is solid and does not overlap in X and Y
Dimensionality
- Screen density = screen pixels wide / screen width in inches
- or pixels per inch (aka DPI - dots per inch)

Dimensionality
- Screen density = screen pixels wide / screen width in inches
- or pixels per inch (aka DPI - dots per inch)
- Density-independent pixels (dp)
- width in pixels * 160 / screen density
- UI elements and images
- Scaleable pixels (sp)
- dp * scaling factor (user's font size preference)
- Typeography
Light and Shadow
Material at higher Z values will cast a shadow upon those materials visible at lower Z positions.
Both directional lighting and ambient lighting is observed.

The Material Design Specification
https://design.google.com/spec/
Material Design Lite
http://www.getmdl.io/
- Google sponsored development effort
- Very active community, 17K+ stars on Github
- Good browser support

Material-UI
http://www.material-ui.com/
- React Framework
- Very active community, 12K+ stars on Github

Polymer
https://www.polymer-project.org/

- Web Components (html templates, shadow dom, html import, custom elements) [Chrome and Opera are ready]
- Polyfills/Shims (until browsers are ready)
- Canonical implementation of Material Design
Materialize
http://materializecss.com/
- 4 guys from Carnegie Mellon University
- Awesome support of the specification
- Commit activity may be slowing
- 15K+ stars on GitHub

Angular Material
https://material.angularjs.org/
- Angular JS 1.x Library
- 12K Stars on GitHub
- Strong community support

Angular Material
https://material.angularjs.org/
- Developed and deployed under Angular JS team
- Version 1.0 released December 8, 2015
- Version 1.0.1 released December 17, 2015
- 1.0 works with Angular 1.3.19+ and 1.4.6+
- Recommend material-start seed project
https://github.com/angular/material-start - Angular Material compatibility with Angular 2.0 is a work in progress

Angular Material Basic Demo
Material
Material Rules
- Varying x & y dimensions
- Uniform thickness (1dp)
- Material cast shadows
- Material is solid
- Multiple material cannot occupy the same point in space
- Material cannot pass through other material
Material Transformations
- Material can change shape
- Material grows and shrinks only along its plane
- Material never bends or folds
- Material sheets can split and join
- Material sheets can "heal"
Content
- Content is applied to the surface of material
- Content is bounded by the material's bounds
- Content does not have thickness
Elevation
All material objects have a resting elevation that is dependent upon the device

Elevation
All material objects have a resting elevation that is dependent upon the device

Layout
Layout Concepts
- Are numerous, way too many to cover
- Material design has given great thought to templates, relative ratios, and device-independent dimensions
- Mobile-first design philosophy
Material design layout can be used
grid-based and structurally.
Flexbox
Angular Material leverages the CSS3 flexbox specification.
Angular directives provide attributes to declaratively define a layout environment that goes beyond grids.
Directives are replaced with class styles that are further defined in angular-material.css.

Responsive Grid
Material Design specifies a grid based on a 12 column layout and uses fixed margin/gutter sizes based on window size.

Conditional Visibility
Example


Responsive Layout
SideNav
Structural
- All components align to an 8dp square baseline grids
- Layout is comprised of structured components – not (necessarily) a grid

<md-toolbar>
<md-list>
<md-input-container>
<md-fab-trigger>
Style
Color
- Bold and vibrant
- Preset palettes
- Custom colors are allowed

Shades of Color
- Varying degrees of intensity
- Primary and secondary palettes
- 500 colors for primary
- Other colors for accent
- Toolbars and large color blocks use 500
- Status bar should be 700
- Accent color indicates primary action, links, switches and sliders

Color Palette Demo
Opacity
Do not use opacity on materials
Opacity should be reserved to differentiate typography
- Important text is 84%
- Secondary text is 54%
- Hints are 38%
- Disabled text
- 38% for dark on light
- 30% for light on dark
- Inactive icon is 26%

Typography
The Roboto typeface was developed by Google as the system font for Android
Licensed under Apache
Originally announced in 2012, and redesigned with the launch of Material Design

Typography
The Noto typeface was commissioned by Google and derived from Droid fonts
Licensed under SIL Open Font
Still under development with plans to support all of Unicode 6.2
98 fonts as of March 2015

Type Styles
Icons
- Bold shapes
- Geometric principles
- <md-icon> directive
- Support for bitmap and SVG
- Actual icons come from Google's Material Design icon page
- Ability to load bundle svg icons into a single file

Animation
Animation Fundamentals
- Material has mass and weight
- Acceleration is smooth and eases
- Movement has purpose and promotes visual continuity
- Directs the user's attention
- Movement is not direct
- Direction is more like birds, and less like atoms
- Angular Material provides intra-component animation
- On your own for cooler transitions
Animation Fundamentals
Components
Questions?
Intro to Material Design
By James Cook
Intro to Material Design
- 1,160