Weergave
Kleur
The times they are a-changing
Gebruik van kleur in CSS is de afgelopen jaren het hard veranderd, dus wat je op oudere sites en in oudere cursussen tegenkomt, is niet meer OK!
Je studeert binnen 3 jaar af met de kennis van nu. Niet met de kennis van 5 jaar geleden.
Oude kleurnotaties
Dezelfde groene kleur, zes keer geschreven:
css
background-color: #00FF00; /* hexadecimaal, kort: #0F0 */
background-color: rgb(0, 255, 0); /* rood, groen, blauw */
background-color: rgba(0, 255, 0, .5); /* met transparantie */
background-color: hsl(120, 100%, 50%); /* hue, saturation, lightness */
background-color: hsla(120, 100%, 50%, .5); /* met transparantie */
background-color: lime; /* named colour */Die moet je kunnen lezen, want je gaat ze overal zien.
Maar wat deze cursus betreft zijn ze ouderwets en dus sterk af te raden.
rgba() en hsla() als aparte functies zijn deprecated: rgb() en hsl() nemen nu zelf een alpha-waarde. En de komma's zijn eruit.
css
/* niet meer */
background-color: rgba(0, 255, 0, .5);
/* wel */
background-color: rgb(0 255 0 / 50%);Hex en named colours zijn nog steeds geldige CSS.
Maar. Je kan er niet mee redeneren. #3a7bd5 zegt je niets over hoe licht of hoe verzadigd (donker) die kleur is, en dus ook niets over of hij leesbaar het op een witte achtergrond.
OKLCH
De nieuwe specificatie (CSS Color Module Level 4) voegt veertien manieren toe om kleuren te definiëren. Dat is er licht over. Wij gebruiken er één: oklch().
Reden 1: lightness is voorspelbaar
In de 'oude' HSL is de lightness berekend volgens lichtenergie, niet volgens wat je oog effectief waarneemt. Twee kleuren met precies dezelfde lightness kunnen voor jou toch totaal verschillend lichter of donkerder lijken.
css
/* allebei lightness 50%, allebei witte tekst erop */
background-color: hsl(90 100% 50%); /* geelgroen: wit is onleesbaar */
background-color: hsl(270 100% 50%); /* paars: wit is prima leesbaar */Het verschil in lightness is in beide gevallen 50%, en toch is het ene contrast goed en het andere fout. Je kan in HSL dus niet redeneren over contrast.
In OKLCh is de lightness visueel verdeeld. Diezelfde twee kleuren hebben daar een lightnessverschil van 48% tegenover 11%, daar zie je meteen: 11% is te weinig!
🧑🦯➡️ webtoegankelijkheid - accessibility
Contrastfouten staan in de top drie van meest voorkomende toegankelijkheidsproblemen op het web!
Met oklch kies je je kleuren zo dat je die fout niet maakt, in plaats van hem achteraf te moeten opsporen met de axe devtools die je al kent uit de vorige les.
Reden 2: er bestaan meer kleuren dan je scherm
Een standaardscherm toont de sRGB-kleurenset. Daar zijn RGB en HSL op gebouwd. Nieuwere schermen, zoals die van Apple en OLED-panelen, tonen de ruimere P3-set.
Met oklch() kan je kleuren benoemen die buiten sRGB vallen. Op een scherm dat ze aankan zie je ze, op een ander scherm valt de browser terug op de dichtstbijzijnde kleur die wel kan.
💡 Experimenteer!
Op hueplot.ardov.me zie je die kleurruimtes in drie dimensies.
Oklch notatie
css
color: oklch(0.25 0.01 325);
background-color: oklch(0.99 0.003 325);
border-color: oklch(0.5 0.2 25 / 50%);| Waarde | Wat | Bereik |
|---|---|---|
| L | Lightness: hoe licht | 0 tot 1, of 0% tot 100% |
| C | Chroma: hoe verzadigd | 0 tot ongeveer 0.4 |
| H | Hue: welke kleur op de kleurencirkel | 0 tot 360 |
| A | Alpha, optioneel | / 0 tot / 1, of / 0% tot / 100% |
Geen komma's tussen L, C en H. Wel een schuine streep voor de alpha.
Gebruik de kleurkiezer
Je hoeft die getallen niet te verzinnen. Gebruik oklch.com, je ziet meteen het resultaat en je krijgt de CSS om te kopiëren.
Heb je een hex-kleur uit een design of een logo, dan kan je die er ook in plakken en laat de tool je zien wat de oklch-waarden zijn.
Tl;dr
- geen komma's
- geen
rgba()ofhsla(), maaroklch(), - controleer je contrast tussen tekst en achtergrond!
Volgende week
Je gaat deze week nog dezelfde kleuren op veel verschillende plaatsen herhalen in je stylesheet.
Als je die wil aanpassen is dat erg vervelend.
Daar bestaat een oplossing voor, CSS custom properties, of simpel gezegd "css variabelen".
Die komen later aan bod.