Color contrast checker
Check any text and background colour against WCAG 2.2 and APCA. See exactly what passes, preview it on real UI, and get the nearest colour that fixes a fail without losing your brand hue.
- Free, no signup
- Runs in your browser
- Nothing is uploaded
Colours
Type a hex or use the picker.
Try a pair
Fix it
The closest colour to yours that passes, same hue.
Passes AA
#5c5e63
Passes AAA
#56585d
Result
Contrast ratio
6.48:1
APCA Lc 82.2
Fine for body text (16px+)
- AA · normal textneeds 4.5:1Pass
- AA · large textneeds 3:1Pass
- AAA · normal textneeds 7:1Fail
- AAA · large textneeds 4.5:1Pass
- UI & iconsneeds 3:1Pass
Live preview
Your colours on real interface text.
Large text · 24px
The quick brown fox jumps over the lazy dog.
Body text at 16px. Good contrast lets everyone read your interface — in sunlight, on a cheap screen, or with low vision.
Small print at 13px is where weak contrast hurts first.
How it works
How to use the color contrast checker
- 01
Enter your two colours
Type or pick the text colour and the background colour. Hex with or without the #, three or six digits.
- 02
Read the ratio
The contrast ratio updates live, with a pass or fail for WCAG 2.2 AA, AAA and non-text UI, plus an APCA Lc score.
- 03
Fix what fails
Drag the lightness slider, or press Use on the nearest passing colour — it keeps your hue, so the brand still reads.
- 04
Share the result
The colours live in the URL. Press Share to send the exact check to a designer, developer or client.
What a contrast ratio measures
Contrast ratio compares the relative luminance of two colours, how bright each looks to the human eye once the screen's gamma is accounted for. The scale runs from 1:1 (identical colours) to 21:1 (pure black on pure white). WCAG uses it because luminance difference, not hue, is what lets people with low vision or colour-blindness tell text apart from its background.
That is why two colours can look very different and still fail. Red text on a green background, for example, can have almost the same luminance and become unreadable for the roughly 1 in 12 men with red-green colour blindness.
The WCAG 2.2 thresholds, in one table
| What you are checking | AA | AAA |
|---|---|---|
| Body text (under 24px, or under ~18.7px bold) | 4.5:1 | 7:1 |
| Large text (24px+, or ~18.7px+ bold) | 3:1 | 4.5:1 |
| Icons, input borders, focus rings, chart lines | 3:1 | — |
| Logos and purely decorative elements | Exempt | Exempt |
Fixing contrast without wrecking the brand
Most contrast fails come from mid-tone greys on white and from white text on bright brand colours. The fix is almost always a change in lightness, not hue. This checker adjusts lightness in OKLCH, a colour space where equal steps look equally different. Your blue stays blue, just darker or lighter.
- Grey body text: on white,
#767676is the lightest neutral grey that passes AA. Anything paler is decoration, not copy. - Bright buttons: keep the bright colour for large surfaces and illustrations, and ship a darker shade for buttons that carry white labels.
- Dark mode: pure white on pure black can glare. Off-white on near-black, such as
#f4f1econ#141312, still clears AAA and is calmer to read.
Building a full palette? Generate accessible shades with the Tailwind colour scale generator, then check each text pair here.
WCAG 2 vs APCA: which number to trust
WCAG 2's formula is legally referenced and simple, but it over-rates some dark colour pairs and under-rates others. APCA, the candidate method for WCAG 3, is perceptually more accurate and scales the requirement with font size and weight. A sensible 2026 workflow is to meet WCAG 2.2 AA for complianceand use APCA's Lc to catch pairs that technically pass but read poorly. Lc 75+ is comfortable for body text, Lc 60 is the floor for larger content text.
Common questions
Color contrast checker: FAQ
4.5:1 for normal body text and 3:1 for large text, which WCAG defines as 24px regular or about 18.7px bold and up. Icons, input borders and other meaningful UI parts need 3:1 against what sits next to them.
Need it done for you?