77
CSS GRID LAYOUT FROM THE INSIDE OUT MANUEL REGO CASASNOVAS ( ) @regocas HTML5DevConf Autumn 2015 / 19-20 October 2015 (San Francisco)

CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

  • Upload
    igalia

  • View
    369

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

CSS GRID LAYOUTFROM THE INSIDE OUT

MANUEL REGO CASASNOVAS ( )@regocas

HTML5DevConf Autumn 2015 / 19-20 October 2015 (San Francisco)

Page 2: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

ABOUT MECSS Grid Layout implementor (Chromium/Blink &

Safari/WebKit)

Member of Igalia Web Platform Team

Page 3: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRIDS EVERYWHERE

Page 4: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRIDS EVERYWHERE

Page 5: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

1996

Page 6: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

EVOLUTION

Page 7: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

<TABLE>

ὣ�

Page 8: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

FLOAT

ὣ�

Page 9: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

DISPLAY: INLINE-BLOCK;

ὣ�

Page 10: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

DISPLAY: TABLE;

ὢ�

Page 11: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

CSS FRAMEWORKS

ὠ�

Page 12: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

DISPLAY: FLEX;

ὠ�

Page 13: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

DISPLAY: GRID;

ὠ�

Page 14: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)
Page 15: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID CONCEPTSHeader

MainAside

Footer

Page 16: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID LINESHeader

MainAside

Footer

1 2 31

2

34

Page 17: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID TRACKS

Page 18: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID TRACKSROWS

Header

MainAside

Footer

Page 19: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID TRACKSCOLUMNS

Header

MainAside

Footer

Page 20: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID CELLSHeader

MainAside

Footer

Page 21: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID AREASHeader

MainAside

Footer

Page 22: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)
Page 23: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

DISPLAY: GRID;New formatting context

Page 24: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

TRACK SIZINGgrid-template-columns & grid-template-rows

Create boxes from CSS!

Page 25: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

TRACK SIZING EXAMPLEABCD

.grid { display: grid; grid-template-columns: ; grid-template-rows: ; }

<div class="grid"> <div class="a">A</div> <div class="b">B</div> <div class="c">C</div> <div class="d">D</div></div>

Page 26: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACEMENT PROPERTIESgrid-column & grid-row

DOM order ≠ Visual order

Page 27: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACEMENT EXAMPLEABC

.grid { display: grid; grid: 200px 200px / 100px 100px; }.a { }

<div class="grid"> <div class="a">A</div> <div class="b">B</div> <div class="c">C</div></div>

Page 28: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

NAMED GRID LINESUse custom identifiers to reference lines

A line can have several names

Page 29: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

NAMED LINES EXAMPLEABC

.grid { display: grid; grid-template-columns: [left] 100px [middle center] 200px [right]; }

<div class="grid"> <div class="a">A</div> <div class="b">B</div> <div class="c">C</div></div>

Page 30: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID AREASgrid-template-areas

### ###### ###### #### #### ### ######## ######## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ###### ## ## ## ## ## ######## ########### ## ## ## ## ######### ## ## #### ## ## ## ## ## ## ## ## ## ## ## #### ## ###### ###### #### #### ## ## ## ## ##

Page 31: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID AREAS EXAMPLEABCD

.grid { display: grid; grid-auto-columns: 100px; grid-auto-rows: 75px; grid-template-areas: "head head" "nav main" "foot foot"; }.a { grid-area: head; }.b { grid-area: main; }.c { grid-area: nav; }.d { grid-area: foot; }

<div class="grid"> <div class="a">A</div> <div class="b">B</div> <div class="c">C</div> <div class="d">D</div></div>

Page 32: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

ALIGNMENT specCSS Box Alignment

Horizontal & vertical centering!

Page 33: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

ITEMS ALIGNMENT EXAMPLEABC

.grid { display: grid; grid: 200px 200px / 100px 100px; align-items: ; justify-items: ; }.b { align-self: ; justify-self: ; }

<div class="grid"> <div class="a">A</div> <div class="b">B</div> <div class="c">C</div></div>

Page 34: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

TRACKS ALIGNMENT EXAMPLEABC

.grid { display: grid; grid: 150px 150px / 100px 100px; align-content: ; justify-content: ; }

<div class="grid"> <div class="a">A</div> <div class="b">B</div> <div class="c">C</div></div>

Page 35: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID GUTTERSgrid-row-gap & grid-column-gap

Page 36: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

GRID GUTTERS EXAMPLEABCDE

.grid { display: grid; grid: 100px 100px 100px / 100px 100px; grid-row-gap: ; grid-column-gap: ; }

<div class="grid"> <div class="a">A</div> <div class="b">B</div> <div class="c">C</div> <div class="d">D</div> <div class="e">E</div></div>

Page 37: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

AUTO-PLACEMENTgrid-auto-flow

Page 38: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

AUTO-PLACEMENT EXAMPLEInput

Checkbox Submit form

form { }label { }input { }

<form> <label>Input</label> <input> <label>Checkbox</label> <input type="checkbox"> <button>Submit form</button></form>

Page 39: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

RESPONSIVE GRIDSFlexible track sizing

Media Queries

Page 40: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

RESPONSIVE GRID EXAMPLE.grid { display: grid; grid: 200px 1fr / 100px 1fr auto; grid-template-areas: "header header" "aside main " "aside footer";}

@media (max-width: 400px) { .grid { grid: 1fr / 100px 1fr 100px auto; grid-template-areas: "header" "main " "aside " "footer"; }}

Page 41: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

RESPONSIVE GRID EXAMPLEHeader

MainAside

Footer

Page 42: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)
Page 43: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

& keywords for

AUTO REPEATauto-fill auto-fit repeat()

Page 44: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

AUTO REPEAT EXAMPLE

.grid { display: grid; grid-template-columns: repeat(auto-fill, 100px); }

<div class="grid"> <div>A</div> <div>B</div> <div>C</div> <div>D</div> <div>E</div></div>

A B C D E

Page 45: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

SUBGRIDS

Nested Grid

A B C

D

E

S1 Sub2

S3 Sub4

Subgrid

A B C

D

E

Sub1 Sub2

Sub3 Sub4

Page 46: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

SUBGRIDS EXAMPLEInputCheckboxSubmit form

ul { display: grid; }li { display: grid; }label { grid-column: 1; }

<form><ul> <li><label>Input</label><input <li><label>Checkbox</label><input <li><button>Submit form</button</ul></form>

Page 47: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

HOW DOES IT WORK?

Page 48: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

EXAMPLE<div class="grid"> <div class="title">Title</div> <div class="nav">Nav</div> <div class="main">Lorem ipsum...</div> <div class="aside">Ad</div> <div class="aside">Adword</div></div>

.grid { display: grid; width: 800px; grid-template-columns: 200px 1fr auto; grid-template-rows: 100px auto; }.title { grid-row: 1; grid-column: 2; }.nav { grid-row: 2; grid-column: 1; }.main { grid-row: 2; grid-column: 2; }.aside { grid-column: 3; }

Page 49: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

EMPTY GRID

Page 50: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACE ITEMS

Title

.title { grid-row: 1; grid-colum: 2; }

Page 51: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACE ITEMS

Title

Nav

.nav { grid-row: 2; grid-colum: 1; }

Page 52: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACE ITEMS

Title

Nav Lorem ipsum...

.main { grid-row: 2; grid-colum: 2; }

Page 53: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACE ITEMS

Title

Nav Lorem ipsum...

Ad

.aside { grid-colum: 3; }

Page 54: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACE ITEMS

Title

Nav Lorem ipsum...

Ad

Adword

.aside { grid-colum: 3; }

Page 55: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

PLACE ITEMS

Title

Nav Lorem ipsum...

Ad

Adword

Page 56: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

FIXED COLUMN

Title

Nav Lorem ipsum...

Ad

Adword

200px

Page 57: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

INTRINSIC COLUMN

Title

Nav Lorem ipsum...

Ad 60px

Adword 130px

200px auto

Page 58: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

INTRINSIC COLUMN

Title

Nav Lorem ipsum...

Ad

Adword

200px 130px

Page 59: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

FLEXIBLE COLUMN

Title

Nav Lorem ipsum...

Ad

Adword

200px 130px1fr

Page 60: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

FLEXIBLE COLUMN

Title

Nav Lorem ipsum...

Ad

Adword

200px 130px470px

Page 61: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

LAYOUT ITEMS

Title

Nav Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do iusmod tempor incididunt ut labore et dolore magna aliqua.

Ad

Adword

200px 130px470px

Page 62: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

FIXED ROW

Title

Nav Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do iusmod tempor incididunt ut labore et dolore magna aliqua.

Ad

Adword

200px 130px470px

100px

Page 63: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

INTRINSIC ROW

Title

Nav60px

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do iusmod tempor incididunt ut labore et dolore magna aliqua.

160px

Ad

Adword60px

200px 130px470px

100px

auto

Page 64: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

INTRINSIC ROW

Title

Nav Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do iusmod tempor incididunt ut labore et dolore magna aliqua.

Ad

Adword

200px 130px470px

100px

160px

Page 65: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

STRETCH ITEMS

Title

Nav Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do iusmod tempor incididunt ut labore et dolore magna aliqua.

Ad

Adword

200px 130px470px

100px

160px

Page 66: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

FASTER GRIDS

Page 67: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

FIXED VS INTRINSIC SIZING200px is faster than auto

Page 68: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

INTRINSIC VS FLEXIBLE SIZINGauto is faster than 1fr

Page 69: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

VERTICAL STRETCHVertical stretch in auto-sized items is slower than other

(e.g. start)

Item

Page 70: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

HORIZONTAL NON-STRETCHAvoid horizontal stretch (e.g. start) in auto-sized

items is slower

Item

Page 71: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

STATUS

Page 72: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

W3C SPECIFICATIONCSS Grid Layout - https://drafts.csswg.org/css-grid/

Started by Microsoft in 2010

Last Working Draft 17 September 2015

W3C Test Suite

Page 73: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

CAN I USE GRID? ὢ�

Page 74: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

BROWSERS ADOPTION ὠ�Old implementationsince IE 10

Prefixed: -ms

More completeimplementation

⚐Experimental WebPlatform Features

Enabled by default onWebKit Nightlies

Prefixed: -webkit

Implementation startedearly this year

⚐layout.css.grid.enabled

Polyfill: https://github.com/FremyCompany/css-grid-polyfill

Page 75: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

EXAMPLES by Igalia

by Rachel Andrewhttp://igalia.github.io/css-grid-layout/http://gridbyexample.com/

Page 76: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

ACKNOWLEDGEMENTS

and working together to build a better webIgalia Bloomberg

Page 77: CSS Grid Layout from the inside out (HTML5DevConf Autumn 2015)

© euphro https://www.flickr.com/photos/euphro/8455969860/

THANK YOU!Twitter: Mail: Blog:

@[email protected]://blogs.igalia.com/mrego/