Hello subgrid!

A presentation at CSSConf EU in May 2019 in Berlin, Germany by Rachel Andrew

Slide 1

Slide 1

Hello, subgrid @rachelandrew at CSSConf EU 2019 Slides & resources https://noti.st/rachelandrew

Slide 2

Slide 2

Doing things on the web since 1996 Co-founder Perch CMS & Notist. Editor in Chief Smashing Magazine. Writer of many books. CSS Working Group Member representing Fronteers. Spec editor Multicol and Page Floats. MDN tech writer. Slides & resources https://noti.st/rachelandrew

Slide 3

Slide 3

Slides & resources https://noti.st/rachelandrew

Slide 4

Slide 4

CSS Grid Layout Two years on. Slides & resources https://noti.st/rachelandrew

Slide 5

Slide 5

So, what’s next? Slides & resources https://noti.st/rachelandrew

Slide 6

Slide 6

Slides & resources https://noti.st/rachelandrew

Slide 7

Slide 7

Slides & resources https://noti.st/rachelandrew

Slide 8

Slide 8

Only direct children become grid or flex items. Their children return to normal flow. Slides & resources https://noti.st/rachelandrew

Slide 9

Slide 9

Slides & resources https://noti.st/rachelandrew

Slide 10

Slide 10

Slides & resources https://noti.st/rachelandrew

Slide 11

Slide 11

display: contents Removing the box from the layout. Slides & resources https://noti.st/rachelandrew

Slide 12

Slide 12

Slides & resources https://noti.st/rachelandrew

Slide 13

Slide 13

<!—HTML—> <div class=”grid”> <div>Direct Child</div> <div>Direct Child</div> <ul> <li>List Item</li> <li>List Item</li> <li>List Item</li> </ul> <div>Direct Child</div> </div>

Slides & resources https://noti.st/rachelandrew

Slide 14

Slide 14

/* CSS */ .grid { display: grid; grid-template-columns: repeat(3, 1fr); } .grid > * { background-color: rgba(255,255,255,.5); } ul > * { background-color: rgb(209,54,114); } ul { } Slides & resources https://noti.st/rachelandrew

Slide 15

Slide 15

/* CSS */ .grid { display: grid; grid-template-columns: repeat(3, 1fr); } .grid > * { background-color: rgba(255,255,255,.5); } ul > * { background-color: rgb(209,54,114); } ul { } display: contents; Slides & resources https://noti.st/rachelandrew

Slide 16

Slide 16

Slides & resources https://noti.st/rachelandrew

Slide 17

Slide 17

Slides & resources https://noti.st/rachelandrew

Slide 18

Slide 18

Slides & resources https://noti.st/rachelandrew

Slide 19

Slide 19

Subgrid Create a grid on a grid item which uses the grid tracks defined on the parent – for rows, columns or both. Slides & resources https://noti.st/rachelandrew

Slide 20

Slide 20

.grid { display: grid; grid-template-columns: repeat(9, 1fr); grid-template-rows: repeat(4, minmax(100px, auto)); } .item { grid-column: 2 / 7; grid-row: 2 / 4; display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(3, 80px); } .subitem { grid-column: 2 / 4; grid-row: 1 / 4; } Slides & resources https://noti.st/rachelandrew

Slide 21

Slide 21

Slides & resources https://noti.st/rachelandrew

Slide 22

Slide 22

Slides & resources https://noti.st/rachelandrew

Slide 23

Slide 23

Slides & resources https://noti.st/rachelandrew

Slide 24

Slide 24

.grid { display: grid; grid-template-columns: repeat(9, 1fr); grid-template-rows: repeat(4, minmax(100px, auto)); } .item { grid-column: 2 / 7; grid-row: 2 / 4; display: grid; grid-template-columns: subgrid; grid-template-rows: repeat(3, 80px); } .subitem { grid-column: 3 / 6; grid-row: 1 / 4; } Slides & resources https://noti.st/rachelandrew

Slide 25

Slide 25

.grid { display: grid; grid-template-columns: repeat(9, 1fr); grid-template-rows: repeat(4, minmax(100px, auto)); } .item { grid-column: 2 / 7; grid-row: 2 / 4; display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: subgrid; } .subitem { grid-column: 2 / 4; grid-row: 1 / 3; } Slides & resources https://noti.st/rachelandrew

Slide 26

Slide 26

.grid { display: grid; grid-template-columns: repeat(9, 1fr); grid-template-rows: repeat(4, minmax(100px, auto)); } .item { grid-column: 2 / 7; grid-row: 2 / 4; display: grid; grid-template-columns: subgrid; grid-template-rows: subgrid; } .subitem { grid-column: 3 / 6; grid-row: 1 / 3; } Slides & resources https://noti.st/rachelandrew

Slide 27

Slide 27

Line numbers start from 1 inside the subgrid. You position child items in the subgrid according to the subgrid line numbering, not those of the parent. Slides & resources https://noti.st/rachelandrew

Slide 28

Slide 28

Slides & resources https://noti.st/rachelandrew

Slide 29

Slide 29

Line names on the parent are passed into the subgrid. If you have named lines on the parent grid they will be passed into the subgrid and added to any names defined there. Slides & resources https://noti.st/rachelandrew

Slide 30

Slide 30

col-start col-end col-start col-end Slides & resources https://noti.st/rachelandrew

Slide 31

Slide 31

.grid { display: grid; grid-template-columns:1fr 1fr 1fr [col-start] 1fr 1fr 1fr [col-end] 1fr 1fr 1fr; grid-template-rows: repeat(4, minmax(100px, auto)); } .item { grid-column: 2 / 7; grid-row: 2 / 4; display: grid; grid-template-columns: subgrid; grid-template-rows: subgrid; } .subitem { grid-column: col-start / col-end; grid-row: 1 / 3; } Slides & resources https://noti.st/rachelandrew

Slide 32

Slide 32

You can add named lines to the subgrid. Line names are added after the subgrid keyword. Slides & resources https://noti.st/rachelandrew

Slide 33

Slide 33

grid-template-columns: subgrid [sub-a] [sub-b]; Slides & resources https://noti.st/rachelandrew

Slide 34

Slide 34

col-end col-start sub-b sub-d Slides & resources https://noti.st/rachelandrew

Slide 35

Slide 35

.grid { display: grid; grid-template-columns: 1fr 1fr 1fr [col-start] 1fr 1fr 1fr [col-end] 1fr 1fr 1fr; grid-template-rows: repeat(4, minmax(100px, auto)); } .item { grid-column: 2 / 7; grid-row: 2 / 4; display: grid; grid-template-columns: subgrid [sub-a] [sub-b] [sub-c] [sub-d] [sub-e] [sub-f]; grid-template-rows: subgrid; } .subitem { grid-column: col-start / col-end; grid-row: 1 / 3; } .subitem2 { grid-column: sub-b / sub-d; grid-row: 1 / 3; } Slides & resources https://noti.st/rachelandrew

Slide 36

Slide 36

The subgrid inherits the gaps from the parent. Slides & resources https://noti.st/rachelandrew

Slide 37

Slide 37

Slides & resources https://noti.st/rachelandrew

Slide 38

Slide 38

You can change the gaps on the subgrid. Slides & resources https://noti.st/rachelandrew

Slide 39

Slide 39

Slides & resources https://noti.st/rachelandrew

Slide 40

Slide 40

Sizing of items in the subgrid can change the size of the parent tracks. Slides & resources https://noti.st/rachelandrew

Slide 41

Slide 41

Slides & resources https://noti.st/rachelandrew

Slide 42

Slide 42

Subgrid enables some previously difficult patterns. Slides & resources https://noti.st/rachelandrew

Slide 43

Slide 43

Slides & resources https://noti.st/rachelandrew

Slide 44

Slide 44

.wrapper { display: grid; gap: 10px; grid-template-columns: repeat(5, 1fr); /* 5 explicit rows */ grid-template-rows: repeat(5, minmax(100px, auto)); } .fullheight { background-color: rgb(209,54,114); grid-row: 1 / -1; } Slides & resources https://noti.st/rachelandrew

Slide 45

Slide 45

Line -1 is the end line of the explicit grid. Slides & resources https://noti.st/rachelandrew

Slide 46

Slide 46

Slides & resources https://noti.st/rachelandrew

Slide 47

Slide 47

.wrapper { display: grid; gap: 10px; grid-template-columns: repeat(5, 1fr); /* no defined explicit rows */ grid-auto-rows: minmax(100px, auto); } .fullheight { background-color: rgb(209,54,114); grid-row: 1 / -1; } Slides & resources https://noti.st/rachelandrew

Slide 48

Slide 48

We can’t target the end line of the implicit grid. Slides & resources https://noti.st/rachelandrew

Slide 49

Slide 49

Place the items in a container which uses a subgrid for columns. Slides & resources https://noti.st/rachelandrew

Slide 50

Slide 50

Slides & resources https://noti.st/rachelandrew

Slide 51

Slide 51

.wrapper { display: grid; gap: 10px; grid-template-columns: repeat(5, 1fr); /* no defined explicit rows */ grid-auto-rows: minmax(100px, auto); } .items { grid-column: 2 / -1; display: grid; grid-template-columns: subgrid; grid-auto-rows: minmax(100px, auto); } .fullheight { background-color: rgb(209,54,114); grid-row: 1 / -1; } Slides & resources https://noti.st/rachelandrew

Slide 52

Slide 52

Now the bad news There are currently no shipped implementations of subgrid. Slides & resources https://noti.st/rachelandrew

Slide 53

Slide 53

Slides & resources https://noti.st/rachelandrew

Slide 54

Slide 54

Slightly better news Firefox have shipped subgrid in Nightly! Slides & resources https://noti.st/rachelandrew

Slide 55

Slide 55

Slides & resources https://noti.st/rachelandrew

Slide 56

Slide 56

Slides & resources https://noti.st/rachelandrew

Slide 57

Slide 57

Fewer rendering engines fewer places where new ground can be broken. Slides & resources https://noti.st/rachelandrew

Slide 58

Slide 58

Tell browsers what you want in the platform. Slides & resources https://noti.st/rachelandrew

Slide 59

Slide 59

Slides & resources https://noti.st/rachelandrew

Slide 60

Slide 60

https://bugs.chromium.org/p/chromium/issues/detail?id=618969 Slides & resources https://noti.st/rachelandrew

Slide 61

Slide 61

Write about features you want to see in browsers Write up your use cases, the problems having the feature will solve. Slides & resources https://noti.st/rachelandrew

Slide 62

Slide 62

Use new features Browsers are watching. Slides & resources https://noti.st/rachelandrew

Slide 63

Slide 63

Slides & resources https://noti.st/rachelandrew

Slide 64

Slide 64

Use new features when they are behind a flag You get to beta test the web platform! Slides & resources https://noti.st/rachelandrew

Slide 65

Slide 65

Give feedback to the CSS Working Group https://github.com/w3c/csswg-drafts/issues Slides & resources https://noti.st/rachelandrew

Slide 66

Slide 66

Slides & resources https://noti.st/rachelandrew

Slide 67

Slide 67

Participate in the web platform Or you are leaving your future as a designer or developer in the hands of the very few who do. Slides & resources https://noti.st/rachelandrew

Slide 68

Slide 68

Thank you https://noti.st/rachelandrew/i6gUcF/ Slides & resources https://noti.st/rachelandrew