Custom properties sind mehr als bloß CSS-Variablen

A presentation at Webkongress Erlangen in September 2018 in Erlangen, Germany by Gunnar Bittersmann

Slide 1

Slide 1

Slide 2

Slide 2

  • beginnen immer mit !-- setzen: !--my-property: 42; - verwenden: var(!--my-property) - werden vererbt - gehorchen der Spezifität

Slide 3

Slide 3

BeispiEl: info-boxEn codepen.io/gunnarbittersmann/pen/QOxEoW

Slide 4

Slide 4

BeispiEl: termiNkalEnDer codepen.io/gunnarbittersmann/pen/mGVpgw

Slide 5

Slide 5

<li style="!--start: h1100; !--end: h1300"> Zwischen Frühstück und Gänsebraten !</li> Das sind keine Inline-Styles. <div class="container"> <div class="row"> <div class="col-12 col-md-8 col-lg-6"> Aber das sind Inline-Styles. 💩

Slide 6

Slide 6

Schriftgröße: 16px bei 320px Breite, 18px bei 960px Breite

Slide 7

Slide 7

SchriFtgröẞe: 16pX bei 320pX breiTE, 18pX bei 960pX breiTE

Slide 8

Slide 8

SchriFtgröẞe: 16pX bei 320pX breiTE, 18pX bei 960pX breiTE body { font-size: 16px } body { font-size: 1em } @media (min-width: 640px) { body { font-size: 17px } } @media (min-width: 40em) { body { font-size: 1.0625em } } @media (min-width: 960px) { body { font-size: 18px } } @media (min-width: 60em) { body { font-size: 1.125em } }

Slide 9

Slide 9

SchriFtgröẞe: 16pX bei 320pX breiTE, 18pX bei 960pX breiTE f(x) = m x + n Δy 18 − 16 18 − 16 m= = = Δx 960 − 320 640 f(x) = m (x − 320) + 16 18 − 16 18 − 16 18 − 16 f(x) = (x − 320) + 16 = x + 16 − 640 640 2 calc((18 - 16)/640 * 100vw + (16 - (18 - 16)/2) * 1rem/16)

Slide 10

Slide 10

SchriFtgröẞe: 16pX bei 320pX breiTE, 18pX bei 960pX breiTE body { font-size: calc((18 - 16)/640 * 100vw + (16 - (18 - 16)/2) * 1rem/16); } ÜbersChrifT: 26pX bei 320pX breiTE, 36pX bei 960pX breiTE h1 { font-size: calc((36 - 26)/640 * 100vw + (26 - (36 - 26)/2) * 1rem/16); }

Slide 11

Slide 11

body { !--font-size-320: 16; !--font-size-960: 18; font-size: calc((var(!--font-size-960) - var(!--font-size-320))/640 * 100vw + (var(!--font-size-320) - (var(!--font-size-960) - var(!--font-size-320))/2) * 1rem/16); } h1 { !--font-size-320: 26; !--font-size-960: 36; }

Slide 12

Slide 12

body { !--font-size-320: 16; !--font-size-960: 18; } h1 { !--font-size-320: 26; !--font-size-960: 36; } body, h1 { font-size: calc((var(!--font-size-960) - var(!--font-size-320))/640 * 100vw + (var(!--font-size-320) - (var(!--font-size-960) - var(!--font-size-320))/2) * 1rem/16); }

Slide 13

Slide 13

BeispiEl: schRiftgRöße codepen.io/gunnarbittersmann/pen/EebWbd

Slide 14

Slide 14

BeispiEl: bildeRgalErie

Slide 15

Slide 15

a·b=A b a a/b=r a=r·b r·b·b=A b² = A / r b = √A / r a = r · √A / r a = √A · r

Slide 16

Slide 16

Heron-verfAHren (babyLoniscHEs wuRzElzieHen) Babylonian method (Heron’s method) a=2 x0 ≈ √a > 0 xn+1 = (xn + a / xn) / 2 x0 = 1 x1 = (1 + 2 / 1) / 2 = 1.5 x2 = (1.5 + 2 / 1.5) / 2 = 1.41666667 lim xn = √a n ∞ x3 = (1.41666667 + 2 / 1.41666667) / 2 = 1.41421568… √2 = 1.41421356…

Slide 17

Slide 17

Slide 18

Slide 18

Heron-verfAHren (babyLoniscHEs wuRzElzieHen) Babylonian method (Heron’s method) a=2 x0 ≈ √a > 0 xn+1 = (xn + a / xn) / 2 lim xn = √a n ∞ x0 = 1 @function sqrt($a) { $x: 1; @for $i from 1 through 3 { x1 = (1 + 2 / 1) / 2 = 1.5 $x: ($x + $a / $x) / 2; x2 = (1.5 + 2 }/ 1.5) / 2 = 1.41666667 x3 = (1.41666667 + 2 / 1.41666667) / 2 = 1.41421568… @return $x; } √2 = 1.41421356…

Slide 19

Slide 19

Heron-verfAHren (babyLoniscHEs wuRzElzieHen) Babylonian method (Heron’s method) a=2 x0 ≈ √a > 0 xn+1 = (xn + a / xn) / 2 lim xn = √a n ∞ x0 = 1 @function sqrt($a) { $x: 1; $x: ($x + $a / $x) / 2; x1 = (1 + 2 / 1) / 2 = 1.5 $x: ($x + $a / $x) / 2; x2 = (1.5 + 2 / 1.5) 2 = 1.41666667 $x: /($x + $a / $x) / 2; x3 = (1.41666667 + 2 / 1.41666667) / 2 = 1.41421568… @return $x; } √2 = 1.41421356…

Slide 20

Slide 20

Heron-verfAHren (babyLoniscHEs wuRzElzieHen) !--area: 0.4; !--a: calc(var(!--area) * var(!--aspect-ratio)); !--x0: !--x1: !--x2: !--x3: 1; calc((var(!--x0) + var(!--a) / var(!--x0)) / 2); calc((var(!--x1) + var(!--a) / var(!--x1)) / 2); calc((var(!--x2) + var(!--a) / var(!--x2)) / 2); width: calc(var(!--x3) * 100%);

Slide 21

Slide 21

Heron-verfAHren (babyLoniscHEs wuRzElzieHen) !--area: 0.4; !--a: calc(var(!--area) * var(!--aspect-ratio)); !--x0: 1; !--x1: calc((var(!--x0) + var(!--a) / var(!--x0)) / 2); !--x2: calc((var(!--x1) + var(!--a) / var(!--x1)) / 2); width: calc(var(!--x2) * 100%);

Slide 22

Slide 22

BeispiEl: bildeRgalErie codepen.io/gunnarbittersmann/pen/mXXYye

Slide 23

Slide 23

<img src="https:!//bittersmann.de/images/65.1057/580.jpg" style="!--aspect-ratio: calc(4/3)" alt=""!/> Das sind keine Inline-Styles. <div class="container"> <div class="row"> <div class="col-12 col-md-8 col-lg-6"> Aber das sind Inline-Styles. 💩

Slide 24

Slide 24

  • beginnen immer mit !-- setzen: !--my-property: 42; - verwenden: var(!--my-property) - werden vererbt - gehorchen der Spezifität

Slide 25

Slide 25

Slide 26

Slide 26

Slide 27

Slide 27

Slide 28

Slide 28

Slide 29

Slide 29

LiebeGerda & LiebedOriS von Ulrike Rausch liebefONts.Com