Kortversionen
- Färgkontrast är skillnaden i ljushet mellan text och dess bakgrund, mätt som ett förhållande från 1:1 (ingen skillnad) till 21:1 (svart på vitt).
- WCAG 2 nivå AA kräver minst 4,5:1 för vanlig text och 3:1 för stor text, vilket är ungefär 24 px normal eller 18,66 px fet.
- Ikoner, kanter på inmatningsfält och andra delar av ett gränssnitt som folk behöver se måste också ha minst 3:1 mot omgivningen.
- På vitt är
#767676det ljusaste vanliga gråa som klarar 4,5:1 för brödtext, och#777777faller precis under. - På en gradient ändras kontrasten från punkt till punkt, så du måste testa den sämsta punkten bakom orden, inte medelfärgen.
På den här sidan
Färgkontrast är skillnaden i ljushet mellan text och färgen bakom, och den avgör om folk över huvud taget kan läsa dina ord. Riktlinjerna Web Content Accessibility Guidelines (WCAG) mäter den som ett förhållande från 1:1, där de två färgerna är identiska, till 21:1, svart på vitt. För nivå AA behöver vanlig text minst 4,5:1 och stor text minst 3:1. Allt annat i den här guiden handlar om att nå de siffrorna utan att göra din design försagd.
Kontrast spelar roll för alla, inte bara för personer med nedsatt syn. Telefoner i solljus, dunkla projektorer, billiga skärmar och trötta ögon krymper alla skillnaden mellan färger. Designer med tillräcklig kontrast blir helt enkelt mer lästa.
WCAG:s kontrastkvoter på klarspråk
Tre regler i WCAG 2 täcker nästan varje designbeslut. De kommer från W3C:s framgångskriterier, och det är dem som de flesta tillgänglighetsgranskningar och regelverk hänvisar till.
| Vad | Nivå AA | Nivå AAA | Anmärkningar |
|---|---|---|---|
| Vanlig text | 4,5:1 | 7:1 | Brödtext, bildtexter, etiketter, knappar |
| Stor text | 3:1 | 4,5:1 | Minst 18 pt (ungefär 24 px), eller 14 pt fet (ungefär 18,66 px) |
| Ikoner och delar av gränssnittet | 3:1 | 3:1 | Kanter på inmatningsfält, diagramlinjer som bär mening, ikoner utan etikett |
| Logotyper och dekoration | Ingen | Ingen | Varumärkeslogotyper och rent dekorativ text är undantagna |
Två detaljer överraskar. För det första handlar ”stor” om den renderade storleken, så en rubrik på 24 px på en telefon som skalar ner den kanske inte längre räknas som stor. För det andra är en inaktiverad knapp undantagen, men en ljusgrå platshållare som folk behöver förstå är det inte.
Så beräknas kontrastkvoten
Kvoten jämför den relativa luminansen hos de två färgerna: hur mycket ljus var och en avger, viktat så som ögat ser. Grönt bidrar mest, rött mindre och blått mycket lite, vilket är varför ett mättat blått kan vara förvånansvärt mörkt och ett gult förvånansvärt ljust. Formeln är (L1 + 0.05) / (L2 + 0.05), där L1 är den ljusare färgen.
// 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, failsDu behöver inte räkna för hand. WebAIM:s kontrastkontroll tar två hexkoder och talar om vilka nivåer som klaras, och färgväljaren i Chromes utvecklarverktyg visar kvoten för all text du inspekterar.
Färgpar som klarar och inte klarar kraven
Varumärkesfärger hamnar ofta i det besvärliga mellanläget, för mörka för mörk text och för ljusa för vit text. Mellangröna, orange, rosa och ljusblå färger är de vanliga bovarna. Här är vanliga kombinationer med sina verkliga kvoter.
| Text på bakgrund | Kvot | Vanlig text | Stor text |
|---|---|---|---|
Vitt på #7c3aed violett | 5,7:1 | Klarar | Klarar |
Vitt på #8b5cf6 ljusviolett | 4,2:1 | Klarar inte | Klarar |
Vitt på #2563eb blått | 5,2:1 | Klarar | Klarar |
Vitt på #3b82f6 himmelsblått | 3,7:1 | Klarar inte | Klarar |
Vitt på #10b981 grönt | 2,5:1 | Klarar inte | Klarar inte |
#0b0b10 nästan svart på #10b981 grönt | 7,7:1 | Klarar | Klarar |
Vitt på #f59e0b bärnsten | 2,2:1 | Klarar inte | Klarar inte |
#999999 grått på vitt | 2,9:1 | Klarar inte | Klarar inte |
#6b7280 grått på vitt | 4,8:1 | Klarar | Klarar |
Därför gör gradienter kontrasten svårare
En enfärgad bakgrund har en kontrastkvot. En gradient har en ny i varje punkt. Vit text som lätt klarar kraven över den mörka änden av en blandning kan helt misslyckas i den ljusa änden, och en rubrik som sträcker sig över gradienten klarar och misslyckas på samma rad.
linear-gradient(90deg, #1f0b3a 0%, #7c3aed 55%, #f472b6 100%)Regeln är enkel: testa den ljusaste punkten bakom ljus text, eller den mörkaste punkten bakom mörk text. Om den sämsta punkten klarar det gör hela raden det. Medelfärger och pipettprov från mitten leder dig vilse.
Så rättar du kontrasten på en gradient
- 1
Flytta orden till den lugna änden
Lägg texten över den mörkaste eller ljusaste delen av gradienten och låt den ljusa övergången ske långt ifrån.
- 2
Smalna av spannet bakom texten
Håll den del av gradienten som ligger bakom orden inom ett litet ljushetsspann. Resten av ytan kan vara så djärv du vill.
- 3
Lägg till en mjuk skugga
En mild mörk eller ljus tonad bakgrund bakom texten, som en gradient från genomskinligt till 30 % svart, höjer kontrasten utan en synlig ruta.
- 4
Gör den större och fetare
Stor text behöver bara 3:1. En kraftigare vikt och en större storlek kan göra en rad som inte klarar kraven till en som gör det.
- 5
Testa på en riktig telefon
Kontrollera designen på full ljusstyrka och på låg, utomhus om du kan. Kvoter är golvet, inte målet.
.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;
}Orden löper rakt över den ljusaste delen av ytan och kontrasten sjunker.
Samma design med det lugna, mörka området flyttat bakom orden.
Det här är tanken bakom Gradiently och läsbarheten: en Mark vet var dina ord finns, flyttar sitt lugnaste område med bäst kontrast bakom dem och väljer ljust eller mörkt bläck per rad ur sin egen palett. För fler tekniker som fungerar var som helst, läs text på en gradient och läsbar text över foton. För mörka gränssnitt särskilt, se att designa för mörkt läge.
Vanliga frågor
Vad är en bra kontrastkvot för färg?
Minst 4,5:1 för vanlig text och 3:1 för stor text uppfyller WCAG nivå AA. För längre läsning är 7:1 (nivå AAA) bekvämare.
Vad räknas som stor text i WCAG?
Text på minst 18 punkter, ungefär 24 px, eller minst 14 punkter fet, ungefär 18,66 px. Stor text behöver bara 3:1 på nivå AA.
Vad är det ljusaste gråa jag kan använda på vitt?
#767676 är det ljusaste vanliga gråa som når 4,5:1 på vitt. #777777 mäter 4,48:1 och klarar inte kraven för brödtext.
Måste logotyper uppfylla kontrastkrav?
Nej. WCAG undantar text som ingår i en logotyp eller ett varumärkesnamn, och rent dekorativ text. Allt som folk behöver läsa eller använda räknas fortfarande.
Hur kontrollerar jag kontrasten på en gradientbakgrund?
Mät textfärgen mot den ljusaste punkten bakom ljus text, eller den mörkaste punkten bakom mörk text. Om den sämsta punkten klarar det gör hela raden det.
Skriven av Gradiently
Teamet bakom Gradiently, ett designverktyg byggt kring Marks: levande gradienter som får allt du gör att kännas som ditt.
Se vår profil


