What’s new in CSS?

A presentation at DevFest North America in November 2021 in by Rachel Andrew

Slide 1

Slide 1

What’s new in CSS DevFest 2021 North America

Slide 2

Slide 2

Rachel Andrew Technical writer for Chrome. Content lead web.dev & developer.chrome.com. CSS Working Group member.

Slide 3

Slide 3

2021 turned out to be an amazing year for CSS!

Slide 4

Slide 4

Use your brand color in form inputs. accent-color

Slide 5

Slide 5

input { accent-color: var(—blue-sapphire); }

Slide 6

Slide 6

Use accent-color now! • Chrome ✅ • Edge ✅ • Firefox ✅ • Safari Technology Preview ✅

Slide 7

Slide 7

New color functions color-mix()

Slide 8

Slide 8

li { background-color: color-mix(in srgb, #34c9eb 10%, white); }

Slide 9

Slide 9

Try out color-mix() In Safari Technology Preview enable CSS color-mix() in the develop menu In Firefox, in about:config enable layout.css.color-mix.enabled

Slide 10

Slide 10

Solving font layout shifts size-adjust, ascent-override, descent-override, line-gap-override

Slide 11

Slide 11

@font-face { font-family: “fallback”; src: local(Arial); size-adjust: 90%; ascent-override: 110%; descent-override: 110%; line-gap-override: 99%; } @font-face { font-family: “Webfont”; src: url(/path/to/webfont.woff2) format(‘woff2’); } html { font-family: “Webfont”, “fallback”; }

Slide 12

Slide 12

Use size-adjust, ascent-override, descent-override, and line-gap-override now! • Chrome ✅ • Edge ✅ • Firefox ✅

Slide 13

Slide 13

Controlling specificity @layer

Slide 14

Slide 14

@layer base special @layer special { .item { color: rebeccapurple; } } @layer base { .item { color: green; } }

Slide 15

Slide 15

Try out @layer In chrome://flags enable “CSS Cascade Layers”.

Slide 16

Slide 16

Aspect Ratios aspect-ratio

Slide 17

Slide 17

The “padding hack” https://css-tricks.com/aspect-ratio-boxes/

Slide 18

Slide 18

aspect-ratio: 16/9;

Slide 19

Slide 19

Slide 20

Slide 20

.wrapper { display: grid; grid-template-columns: 200px 350px; } .box16x9 { aspect-ratio: 16/9; } .box4x3 { aspect-ratio: 4/3; }

Slide 21

Slide 21

Slide 22

Slide 22

1fr 1fr 1fr

Slide 23

Slide 23

Use aspect-ratio now! • Chrome ✅ • Edge ✅ • Firefox ✅ • Safari ✅

Slide 24

Slide 24

CSS Containment This box and children are independent from the rest of the layout.

Slide 25

Slide 25

.sidebar { contain: layout; }

Slide 26

Slide 26

Use the contain property now! • Chrome ✅ • Edge ✅ • Firefox ✅

Slide 27

Slide 27

Container Queries Design components that can react to the available space in their container.

Slide 28

Slide 28

Slide 29

Slide 29

Try out Container Queries In chrome://flags enable “CSS Container Queries”.

Slide 30

Slide 30

.sidebar { container-type: inline-size; }

Slide 31

Slide 31

Using container-type creates a containment context. This also turns on layout, style, and inline-size containment, in the same way as using the contain property does.

Slide 32

Slide 32

.sidebar { container-type: inline-size; container-name: sidebar; }

Slide 33

Slide 33

@container (min-width: 400px) { .card { display: grid; grid-template-columns: 1fr 2fr; } }

Slide 34

Slide 34

@container sidebar (min-width: 400px) { .card { display: grid; grid-template-columns: 1fr 2fr; } }

Slide 35

Slide 35

Slide 36

Slide 36

.wrapper > div { container-type: inline-size; } @container (min-width: 220px) { .box { background-color: var(—blue-sapphire); } }

Slide 37

Slide 37

.fig-panel { display: grid; grid-template-columns: 1fr 1fr; }

Slide 38

Slide 38

@container (min-width: 700px) { grid-template-columns: repeat(3,1fr); }

Slide 39

Slide 39

This seems so simple! Why did it take so long?

Slide 40

Slide 40

Slide 41

Slide 41

Slide 42

Slide 42

Please try out features behind flags! It’s the best time to offer feedback that can change things.

Slide 43

Slide 43

Thank you! Find me @rachelandrew Slides at: https://noti.st/rachelandrew