Painting With the Web

A presentation at beyond tellerrand Düsseldorf 2025 in May 2025 in Düsseldorf, Germany by Matthias Ott

Slide 1

Slide 1

Painting Painting With With the theWeb Web →Matthias Ott Beyond Tellerrand Düsseldorf 2025

Slide 2

Slide 2

! Matthias Ott User Experience Designer Web Design Engineer Teacher for Interface Prototyping, Muthesius University of Fine Arts and Design @matthiasott@mastodon.social https://matthiasott.com

Slide 3

Slide 3

ow n e t i s . b e w yo u r

Slide 4

Slide 4

Slide 5

Slide 5

Slide 6

Slide 6

The ultimate creative process. A constant conversation.

Slide 7

Slide 7

The Canvas

Slide 8

Slide 8

Photo: Brad Frost, 2012

Slide 9

Slide 9

Slide 10

Slide 10

viewports.fyi

Slide 11

Slide 11

Slide 12

Slide 12

Slide 13

Slide 13

Slide 14

Slide 14

We are still static painting pretty pictures of websites

Slide 15

Slide 15

We are still static painting pretty pictures of components websites

Slide 16

Slide 16

The Material

Slide 17

Slide 17

We have a broken relationship with the material

Slide 18

Slide 18

We are breaking the feedback loop

Slide 19

Slide 19

Slide 20

Slide 20

:has() Container Queries min(), max(), clamp() Custom Properties Intrinsic Sizing Keywords Trigonometric Functions Subgrid ViewTransitions Blend Modes Logical Properties CSS Filter Effects Popover API aspect-ratio :is() and :where() @property conic-gradient() Animation-start linear() Easing Function CSS Motion Path Anchor Positioning color() color-mix() Scroll Snap CSS Nesting light-dark() overscroll-behavior touch-action scroll-behavior scrollbar-gutter Variable Fonts font-palette text-wrap: balance

Slide 21

Slide 21

CSS is now CSS is now the most powerful the most powerful design tool design tool for the Web. for the Web.

Slide 22

Slide 22

What designers design What’s possible with the Web platform today

Slide 23

Slide 23

“ What would happen if we stopped treating the Web like a blank canvas to paint on, and started treating it like a material to build with?” Frank Chimero, “The Web’s Grain” https://frankchimero.com/blog/2015/the-webs-grain/

Slide 24

Slide 24

The Web as a design material?

Slide 25

Slide 25

Tim Berners-Lee

Slide 26

Slide 26

Slide 27

Slide 27

Slide 28

Slide 28

<HTML> HTML

Slide 29

Slide 29

<HTML>

Slide 30

Slide 30

Tim Berners-Lee We should work toward a universal linked information system, in which generality and portability are more important than fancy graphics techniques and complex extra facilities. Information Management: A Proposal, 1989

Slide 31

Slide 31

Slide 32

Slide 32

Tim Berners-Lee

Slide 33

Slide 33

Tim Berners-Lee Håkon Wium Lie

Slide 34

Slide 34

https://www.w3.org/People/howcome/p/cascade.html

Slide 35

Slide 35

“Negotiating between the needs and wishes of readers and authors was one of the main ambitions of CSS. If successful, authors would get their fair share of influence over the presentation and would not feel compelled to use presentational HTML and other tricks. Readers, on the other hand, would be served documents in a form in which they could choose between accepting the author’s suggested presentation or specify their own.” Håkon Wium Lie Cascading Style Sheets (PhD Thesis) https://www.wiumlie.no/2006/phd/

Slide 36

Slide 36

h1.font.size = 24pt 100%

Slide 37

Slide 37

24pt 100%

Slide 38

Slide 38

User Author Font o——-x———————o Color o-x—————————o Margin o——————-x———o Volume o————-x—————o 64% 90% 37% 50%

Slide 39

Slide 39

Slide 40

Slide 40

Author control becomes shared author/user influence

Slide 41

Slide 41

head.space.above = 15pt list.space.left = 1cm list.space.first = 1cm

straying from the 4pt default above # extra indentation for all lists

window-wide settings AGE > 3d ? window.background = pale_yellow : window.background = white window.foreground = black window.width = 400px window.height = REAL_HEIGHT - 50px window.margin.left = 2cm window.margin.right = 2cm window.margin.above = 2cm

Slide 42

Slide 42

head.space.above = 15pt list.space.left = 1cm list.space.first = 1cm

straying from the 4pt default above # extra indentation for all lists

window-wide settings AGE > 3d ? window.background = pale_yellow : window.background = white window.foreground = black window.width = 400px window.height = REAL_HEIGHT - 50px window.margin.left = 2cm window.margin.right = 2cm window.margin.above = 2cm

Slide 43

Slide 43

The browser The user Web authors

Slide 44

Slide 44

“ If you use style sheets properly, to suggest the appearance of a page, not to control the appearance of a page, and you don’t rely on your style sheet to convey information, then your pages will work fine in any browser, past or future.” John Allsopp, “A Dao of Web Design” https://alistapart.com/article/dao/

Slide 45

Slide 45

Slide 46

Slide 46

Declarative Design Jeremy Keith Photo by Stefan Nitzsche

Slide 47

Slide 47

ARIA javascript() .css <html>

Slide 48

Slide 48

Typo graphy

Slide 49

Slide 49

font-family: Tausend, Helvetica, Arial, sans-serif;

Slide 50

Slide 50

Fluid Web Typography

Slide 51

Slide 51

Slide 52

Slide 52

font-size: clamp(1rem, 0.6522rem + 1.7391vw, 2rem); min preferred max

Slide 53

Slide 53

a a a a a a a a a a a a aa aaaaa 6 7 8 9 10 11 12 14 16 18 20 22 24 28 32 36 40 44 48 aaaaa 56 64 72 80 88 a 96

Slide 54

Slide 54

Octave a a a a a a a a a a a a aa aaaaa 6 7 8 9 10 11 12 14 16 18 20 22 24 28 32 ×2 ×2 36 40 44 48 ×2 aaaaa 56 64 72 80 88 a 96

Slide 55

Slide 55

Perfect Fifth a a a a a a a a a a a a aa aaaaa 6 7 8 9 10 11 12 14 16 18 20 22 24 28 32 × 1.5 × 1.5 × 1.5 × 1.5 36 40 44 × 1.5 48 aaaa 54 64 72 × 1.5 81 aa 88 96

Slide 56

Slide 56

Interpolation between two typographic scales by viewport width Source: Utopia.fyi

Slide 57

Slide 57

utopia.fyi

Slide 58

Slide 58

utopia.fyi

Slide 59

Slide 59

Interpolation between two typographic scales by viewport width

Slide 60

Slide 60

sin(x)

Slide 61

Slide 61

1 sin(x) 0 min max

Slide 62

Slide 62

sin(), cos(), tan(), asin(), acos(), atan(), and atan2() Baseline 2023 111 111 108 15.4

Slide 63

Slide 63

:root { —minWidth: 320; —maxWidth: 1600; —100vw: 100vw; —font-size-min: 1rem; —font-size-max: 1.5rem; /* Current viewport width in pixels without a unit / —currentWidth: tan(atan2(var(—100vw), 1px)); / This normalizes the value between 0 and 1 / —x: clamp(0, calc((var(—currentWidth) - var(—minWidth)) / (var(—maxWidth) - var(—minWidth))), 1); / Now we can put our x into the sine function / —easeOutSine: sin(var(—x) * pi) / 2); / And calculate our font-size */ —fluid-font-size: clamp(var(—font-size-min), var(—font-size-min) + ( var(—easeOutSine) * (var(—font-size-max) - var(—font-size-min)) ), var(—font-size-max)); }

Slide 64

Slide 64

Slide 65

Slide 65

Painting always has reality Portrait Painting always has reality Landscape

Slide 66

Slide 66

Painting always has reality vw vh sqrt(100vw * 100vh)

Slide 67

Slide 67

Painting always has reality vw vh

Slide 68

Slide 68

Slide 69

Slide 69

Slide 70

Slide 70

Color

Slide 71

Slide 71

rebeccapurple #E646AE rgb(230 70 174) rgba(0.6 153 153 / 0.9) hsl(233.16deg 100% 69.2%) hwb(35.05deg 36.4% 0%)

Slide 72

Slide 72

Slide 73

Slide 73

CIE 1931

Slide 74

Slide 74

CIE 1931 sRGB

Slide 75

Slide 75

CIE 1931 P3 sRGB

Slide 76

Slide 76

Slide 77

Slide 77

oklch

Slide 78

Slide 78

oklch(0.7 0.3357 340.8854) oklch(0.7 0.3357 340.8854 / 50%)

Slide 79

Slide 79

:root { —pink: rgb(255 26 211); } @supports (color: oklch(0.7 0.3357 340.8854)) { :root { —pink: oklch(0.7 0.3357 340.8854); } } .pool { —background-color: var(—pink); }

Slide 80

Slide 80

Slide 81

Slide 81

Slide 82

Slide 82

oklch.com

Slide 83

Slide 83

Slide 84

Slide 84

huetone.ardov.me

Slide 85

Slide 85

atmos.style https://huetone.ardov.me/

Slide 86

Slide 86

Relative Colors Baseline 2024 119 119 128 16.4

Slide 87

Slide 87

oklch(from var(—indigo) l c h); oklch(from var(—indigo) l c h / 50%);

Slide 88

Slide 88

—indigo: oklch(56.6% 0.27 274); —indigo-10: —indigo-20: —indigo-30: —indigo-40: —indigo-50: —indigo-60: —indigo-70: —indigo-80: —indigo-90: —indigo-100: oklch(from oklch(from oklch(from oklch(from oklch(from oklch(from oklch(from oklch(from oklch(from oklch(from var(—indigo) var(—indigo) var(—indigo) var(—indigo) var(—indigo) var(—indigo) var(—indigo) var(—indigo) var(—indigo) var(—indigo) 10% c h); 20% c h); 30% c h); 40% c h); 50% c h); 60% c h); 70% c h); 80% c h); 90% c h); 100% c h);

Slide 89

Slide 89

Slide 90

Slide 90

Slide 91

Slide 91

https://ericportis.com/posts/2024/okay-color-spaces/

Slide 92

Slide 92

https://ericportis.com/posts/2024/okay-color-spaces/

Slide 93

Slide 93

Layout

Slide 94

Slide 94

Tables with spacer GIFs Writing modes Transforms Locigal properties Alignment :has() Floats Flexbox Multi-column layout Aspect-ratio min(), max(), and clamp() Custom properties New sizing values CSS Grid Subgrid Clip-path Cascade layers Object-fit Container queries

Slide 95

Slide 95

CSS Grid

Slide 96

Slide 96

The majority of designers still has no idea of what’s possible with CSS Grid.

Slide 97

Slide 97

Slide 98

Slide 98

grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));

Slide 99

Slide 99

Example: CSS Grid @jensimmons youtube.com/layoutland

Slide 100

Slide 100

https://labs.jensimmons.com/

Slide 101

Slide 101

https://labs.jensimmons.com/ Example: CSS Grid

Slide 102

Slide 102

https://codepen.io/matthiasott/pen/oNyqMgp

Slide 103

Slide 103

Slide 104

Slide 104

Slide 105

Slide 105

CSS Grid 99.63 % https://caniuse.com/css-grid

Slide 106

Slide 106

Subgrid

Slide 107

Slide 107

https://codepen.io/matthiasott/pen/JjqNPEN

Slide 108

Slide 108

Container Queries

Slide 109

Slide 109

https://codepen.io/matthiasott/pen/pomNgKJ

Slide 110

Slide 110

Container Queries (Size) Baseline 2023 106 106 100 16

Slide 111

Slide 111

Accessibility Forms Interactivity Responsiveness Animation Performance

Slide 112

Slide 112

What is our toolset?

Slide 113

Slide 113

Use HTML and CSS much earlier in the process

Slide 114

Slide 114

Prototyping

Slide 115

Slide 115

high Fidelity low narrow Scope wide

Slide 116

Slide 116

Decide in the browser

Slide 117

Slide 117

Design Engineering

Slide 118

Slide 118

Design Engineering

Slide 119

Slide 119

Web Design Engineering

Slide 120

Slide 120

Let devs design

Slide 121

Slide 121

& Let devs design

Slide 122

Slide 122

& Let devs design Let designers code

Slide 123

Slide 123

Let devs design & Let designers code

Slide 124

Slide 124

Slide 125

Slide 125

Slide 126

Slide 126

Thank you! Slides: https://noti.st/matthiasott/31ArQI ” ownyourweb.site # Typefaces: Tausend by Christoph Koeberlin, NaN Tresor by Christoph Koeberlin, NaN Tragedy by Jean-Baptiste Morizot, Input Mono by David Jonathan Ross