Accessibility compliance often gets treated as a checkbox โ something legal requires and developers resent. But color contrast is one of the rare cases where accessibility and good design overlap almost perfectly. Content that's easy to read for users with visual impairments is also easier to read for everyone, on every device, in every lighting condition. Getting contrast right isn't a concession to compliance; it's just good craft.
Why this matters beyond compliance
Color vision deficiency affects roughly 1 in 12 men and 1 in 200 women โ about 300 million people worldwide. The most common form, red-green color blindness, doesn't eliminate color perception but significantly reduces the ability to distinguish certain hues. When designs rely on color alone to communicate meaning, or use low-contrast combinations that depend on subtle hue differences, a meaningful portion of your audience is simply excluded.
Beyond color vision deficiency, poor contrast affects everyone in specific situations: reading outdoors in direct sunlight, using an older or lower-quality display, viewing a screen with glare, or accessing your site on a phone with the brightness turned down. High contrast isn't a niche accommodation โ it's a signal that your design works under real-world conditions.
For organizations building public-facing digital products, WCAG compliance is also increasingly a legal requirement. The EU's European Accessibility Act came into full effect in 2025, and ADA lawsuits in the US regularly cite contrast failures as evidence of inaccessible design.
What is contrast ratio?
Contrast ratio is a number that measures the difference in luminance between two colors โ typically text and its background. The scale runs from 1:1 (both colors are identical, zero contrast) to 21:1 (pure black on pure white, maximum contrast).
The ratio is calculated from the relative luminance of each color โ a measure of perceived brightness that accounts for the fact that the human eye is more sensitive to green than red or blue. The formula is standardized by the W3C, which means any compliant tool will give you the same number for the same two colors.
You don't need to calculate this manually. Any contrast checker (including the free Utively tool below) does it instantly from hex, RGB, or HSL values. The important thing is understanding what the resulting number means, and what threshold you're aiming for.
WCAG 2.1 requirements explained
WCAG (Web Content Accessibility Guidelines) defines three conformance levels. Level A is the minimum; most organizations and legal frameworks target Level AA.
Level AA โ the standard target
Level AA is required by most accessibility regulations and is the benchmark for the vast majority of web and app projects:
- Normal text (under 18pt / under 14pt bold): minimum 4.5:1 contrast ratio
- Large text (18pt and above, or 14pt and above if bold): minimum 3:1 contrast ratio
- UI components and graphical objects (icons, form borders, chart elements): minimum 3:1 against adjacent colors
Level AAA โ enhanced accessibility
Level AAA is aspirational for most teams โ not required by most standards, but worth targeting for content-heavy sites or products used by older audiences:
- Normal text: minimum 7:1
- Large text: minimum 4.5:1
Placeholder text, captions on media, decorative images, and text that is part of a logo are exempt from contrast requirements under WCAG 2.1. However, form input placeholder text in particular is often a problem in practice โ many designs use it for functional guidance, making it effectively non-decorative.
The most common failing combinations
These color pairings appear in real-world designs constantly and routinely fail WCAG AA:
| Text color | Background | Ratio | Result |
|---|---|---|---|
#999999 (light grey) |
#ffffff (white) |
2.85:1 | Fails AA for all text |
#ffffff (white) |
#4a90e2 (medium blue) |
3.13:1 | Fails AA for body text, passes for large text only |
#ffff00 (yellow) |
#ffffff (white) |
1.07:1 | Fails catastrophically โ near-invisible |
#767676 (mid grey) |
#ffffff (white) |
4.54:1 | Barely passes AA for normal text |
#ffffff (white) |
#e74c3c (standard red) |
3.99:1 | Fails AA for normal text, passes for large text |
The light grey on white combination is by far the most common failure. Many design systems use grey text for secondary information, captions, or metadata โ and most of those greys fail. #767676 is the approximate boundary: anything lighter than that on white will fail AA for body text.
How to fix failing contrast
When a combination fails, you have several levers to pull:
- Darken the text color or lighten the background. This is usually the simplest fix. For grey text on white, move from
#999999toward#767676or darker. Avoid the instinct to change both simultaneously โ it's easier to maintain brand colors when you adjust only one side. - Use font weight. Bold text qualifies as "large text" at 14pt and above, dropping the threshold from 4.5:1 to 3:1. If your brand color barely fails for normal text, making it bold and slightly larger may bring it into compliance without changing the color.
- Increase font size. At 18pt (approximately 24px) or above, the 3:1 threshold applies. This is why large hero headings can often use lighter brand colors that would fail at body text size.
- Don't use color alone to convey meaning. Links that are only distinguished by color (blue vs. black text, no underline) may fail for colorblind users even if the contrast ratio passes. Add an underline, icon, or other visual indicator so the distinction is clear without relying on color perception.
- Check in context. A color that passes the raw contrast test can still feel hard to read in practice โ surrounded by other colors, at small sizes, in a specific font. Always verify with a rendered preview, not just the numbers.
Contrast checking in design tools
Most major design tools now have contrast checking built in or readily available:
- Figma has a contrast checker built into the Inspect panel โ select a text layer and it shows the ratio against the background automatically. The Stark plugin adds more detailed WCAG reporting and simulation of color vision deficiencies.
- Sketch doesn't have native contrast checking, but the Stark plugin is popular and well-maintained.
- Adobe XD supports contrast checking through plugins including Stark and Able.
- Browser-based tools have one advantage the design tool plugins don't: they can check published pages as users actually see them, including any CSS rendering differences. If your site is live, a browser-based checker gives you ground truth.
The practical workflow for most teams: check in Figma during design, then do a final pass against the live or staging URL before launch. The two-step approach catches cases where CSS values in production differ from design specs.
Free Color Contrast Checker
Enter any two colors and instantly see the contrast ratio, WCAG AA and AAA pass/fail status, and how the combination looks at different text sizes โ no sign-up required.
Check your contrast ratios โ