Kleur

Kleurcontrast: leesbare tekst voor iedereen

Contrast is het verschil tussen woorden die mensen lezen en woorden die ze overslaan. De WCAG-getallen in gewone taal, hoe je ze controleert en wat verandert als de achtergrond een kleurverloop is.

GradientlyGeverifieerd Gradiently-account··5 min lezen
Cover: Andes Mirror · GR·WVR2·V3

De korte versie

  • Kleurcontrast is het helderheidsverschil tussen tekst en achtergrond, gemeten als verhouding van 1:1 (geen verschil) tot 21:1 (zwart op wit).
  • WCAG 2 niveau AA vraagt minstens 4,5:1 voor gewone tekst en 3:1 voor grote tekst, wat ongeveer 24 px normaal of 18,66 px vet is.
  • Iconen, invoerranden en andere delen van een interface die mensen moeten kunnen zien hebben ook minstens 3:1 nodig tegen hun omgeving.
  • Op wit is #767676 het lichtste gewone grijs dat 4,5:1 haalt voor lopende tekst, en #777777 haalt het net niet.
  • Op een kleurverloop verandert contrast van punt tot punt, dus je moet de slechtste plek achter de woorden testen, niet de gemiddelde kleur.
Op deze pagina

Kleurcontrast is het helderheidsverschil tussen tekst en de kleur erachter, en het bepaalt of mensen je woorden überhaupt kunnen lezen. De Web Content Accessibility Guidelines (WCAG) meten het als verhouding van 1:1, waar beide kleuren gelijk zijn, tot 21:1, zwart op wit. Voor niveau AA heeft gewone tekst minstens 4,5:1 nodig en grote tekst minstens 3:1. Al het andere in deze gids gaat over die getallen halen zonder je ontwerp bedeesd te maken.

Contrast doet ertoe voor iedereen, niet alleen voor mensen met een slecht gezichtsvermogen. Telefoons in zonlicht, doffe projectoren, goedkope monitoren en vermoeide ogen verkleinen allemaal het verschil tussen kleuren. Ontwerpen met genoeg contrast worden gewoon vaker gelezen.

De WCAG-contrastverhoudingen in gewone taal

Drie regels in WCAG 2 dekken bijna elke ontwerpbeslissing. Ze komen uit de succescriteria van het W3C en zijn waar de meeste toegankelijkheidsaudits en regelgeving naar verwijzen.

WatNiveau AANiveau AAAOpmerkingen
Gewone tekst4,5:17:1Lopende tekst, bijschriften, labels, knoppen
Grote tekst3:14,5:1Minstens 18 pt (ongeveer 24 px), of 14 pt vet (ongeveer 18,66 px)
Iconen en interface-onderdelen3:13:1Invoerranden, grafieklijnen die betekenis dragen, iconen zonder label
Logo’s en decoratieGeenGeenMerklogotypes en puur decoratieve tekst zijn uitgezonderd
Niveau AA is het gebruikelijke doel. AAA is strenger en de moeite waard bij lang leeswerk.

Twee details laten mensen struikelen. Ten eerste gaat “groot” over de weergegeven grootte, dus een kop van 24 px op een telefoon die hem verkleint telt misschien niet meer als groot. Ten tweede is een uitgeschakelde knop uitgezonderd, maar een lichtgrijze placeholder die mensen moeten begrijpen niet.

Hoe de contrastverhouding wordt berekend

De verhouding vergelijkt de relatieve luminantie van de twee kleuren: hoeveel licht elk afgeeft, gewogen zoals het oog ziet. Groen draagt het meest bij, rood minder en blauw heel weinig, en daarom kan een verzadigd blauw verrassend donker zijn en een geel verrassend licht. De formule is (L1 + 0.05) / (L2 + 0.05), waarbij L1 de lichtere kleur is.

js
// WCAG 2 contrast ratio between two hex colours
const channel = (c) => {
  c /= 255
  return c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4
}
const luminance = (hex) => {
  const [r, g, b] = [1, 3, 5].map((i) => channel(parseInt(hex.slice(i, i + 2), 16)))
  return 0.2126 * r + 0.7152 * g + 0.0722 * b
}
const contrast = (a, b) => {
  const [hi, lo] = [luminance(a), luminance(b)].sort((x, y) => y - x)
  return (hi + 0.05) / (lo + 0.05)
}

contrast('#767676', '#ffffff') // 4.54, passes for body text
contrast('#777777', '#ffffff') // 4.48, fails
De hele berekening past in een dozijn regels. Handig om een merkpalet in bulk te controleren.

Je hoeft het niet met de hand te berekenen. De contrastchecker van WebAIM neemt twee hexcodes en vertelt welke niveaus slagen, en de kleurkiezer in de ontwikkelaarstools van Chrome toont de verhouding van elke tekst die je inspecteert.

Kleurparen die slagen en falen

Merkkleuren zitten vaak in het lastige midden: te donker voor donkere tekst en te licht voor witte tekst. Middelgroene, oranje, roze en lichtblauwe tinten zijn de gebruikelijke boosdoeners. Dit zijn gangbare combinaties, met hun echte verhoudingen.

Tekst op achtergrondVerhoudingGewone tekstGrote tekst
Wit op #7c3aed violet5,7:1VoldoetVoldoet
Wit op #8b5cf6 licht violet4,2:1Voldoet nietVoldoet
Wit op #2563eb blauw5,2:1VoldoetVoldoet
Wit op #3b82f6 hemelsblauw3,7:1Voldoet nietVoldoet
Wit op #10b981 groen2,5:1Voldoet nietVoldoet niet
#0b0b10 bijna zwart op #10b981 groen7,7:1VoldoetVoldoet
Wit op #f59e0b amber2,2:1Voldoet nietVoldoet niet
#999999 grijs op wit2,9:1Voldoet nietVoldoet niet
#6b7280 grijs op wit4,8:1VoldoetVoldoet
Een kleine verschuiving kan de doorslag geven: twee blauwtinten die bijna hetzelfde lijken landen aan weerszijden van 4,5:1.

Waarom kleurverlopen contrast lastiger maken

Een vlakke achtergrond heeft één contrastverhouding. Een kleurverloop heeft op elk punt een andere. Witte tekst die makkelijk slaagt op het donkere eind van een overgang kan op het lichte eind volledig falen, en een kop die zich over het kleurverloop uitstrekt slaagt en faalt in dezelfde regel.

Middernacht naar violet naar rozelinear-gradient(90deg, #1f0b3a 0%, #7c3aed 55%, #f472b6 100%)
Witte tekst scoort 18:1 links, 5,7:1 over het violet en 2,7:1 aan het roze eind. Eén kleurverloop, drie uitspraken.

De regel is simpel: test het lichtste punt achter lichte tekst, of het donkerste punt achter donkere tekst. Slaagt het slechtste punt, dan slaagt de hele regel. Gemiddelde kleuren en pipetmonsters uit het midden misleiden je.

Zo herstel je contrast op een kleurverloop

  1. 1

    Verplaats de woorden naar het rustige eind

    Zet tekst over het donkerste of lichtste deel van het kleurverloop en laat de heldere overgang daar vandaan gebeuren.

  2. 2

    Verklein het bereik achter de tekst

    Houd het deel van het kleurverloop achter de woorden binnen een klein lichtheidsbereik. De rest van het canvas mag zo gedurfd zijn als je wilt.

  3. 3

    Voeg een zachte sluier toe

    Een zachte donkere of lichte uitloop achter de tekst, zoals een kleurverloop van transparant naar 30% zwart, verhoogt het contrast zonder zichtbaar vak.

  4. 4

    Ga groter en vetter

    Grote tekst heeft maar 3:1 nodig. Een zwaarder gewicht en een grotere maat kunnen een falende regel laten slagen.

  5. 5

    Test op een echte telefoon

    Bekijk het ontwerp op volle helderheid en op lage helderheid, buiten als je kunt. Verhoudingen zijn de ondergrens, niet het doel.

css
.card {
  background: linear-gradient(90deg, #1f0b3a 0%, #7c3aed 55%, #f472b6 100%);
  color: #ffffff;
}
/* A soft scrim keeps white text above 4.5:1 across the pink end */
.card .text {
  background: linear-gradient(90deg, transparent 0%, rgb(31 11 58 / 0.55) 60%);
  padding: 1rem 1.25rem;
}
De sluier verdonkert alleen waar het kleurverloop licht wordt, dus de linkerkant blijft onaangeroerd.

De woorden lopen recht over het helderste deel van het vlak en hun contrast zakt.

Hetzelfde ontwerp met het rustige, donkere gebied achter de woorden.

Dit is het idee achter de leesbaarheid van Gradiently: een Mark weet waar je woorden staan, verplaatst zijn rustigste gebied met het beste contrast erachter en kiest per regel lichte of donkere inkt uit zijn eigen palet. Voor meer technieken die overal werken, lees tekst op een kleurverloop en leesbare tekst over foto’s. Voor donkere interfaces specifiek, zie ontwerpen voor donkere modus.

Vragen die mensen stellen

Wat is een goede kleurcontrastverhouding?

Minstens 4,5:1 voor gewone tekst en 3:1 voor grote tekst voldoet aan WCAG niveau AA. Voor lang lezen is 7:1 (niveau AAA) prettiger.

Wat telt als grote tekst in WCAG?

Tekst van minstens 18 punt, ongeveer 24 px, of minstens 14 punt vet, ongeveer 18,66 px. Grote tekst heeft op niveau AA maar 3:1 nodig.

Wat is het lichtste grijs dat ik op wit kan gebruiken?

#767676 is het lichtste gewone grijs dat 4,5:1 haalt op wit. #777777 meet 4,48:1 en voldoet niet voor lopende tekst.

Moeten logo’s aan contrasteisen voldoen?

Nee. WCAG neemt tekst die deel is van een logo of merknaam uit, en puur decoratieve tekst. Alles wat mensen moeten lezen of gebruiken telt wel mee.

Hoe controleer ik contrast op een kleurverloopachtergrond?

Meet de tekstkleur tegen het lichtste punt achter lichte tekst, of het donkerste punt achter donkere tekst. Slaagt dat slechtste punt, dan slaagt de hele regel.

Deel deze gids

Geschreven door GradientlyGeverifieerd Gradiently-account

Het team achter Gradiently, een ontwerptool rond Marks: levende kleurverlopen die alles wat je ontwerpt op jou laten lijken.

Bekijk ons profiel