
Check WCAG Color Contrast Online: AA, AAA and Large Text
Insufficient text-to-background contrast is the most common accessibility failure on the web. Check AA/AAA compliance by pasting two colors, no plugin or extension required.
Contrast, the most common accessibility failure on the web
Every year, the WebAIM Million audit ranks insufficient text contrast as the top WCAG failure detected, ahead of missing alt text or unlabeled links. The audit analyzes the most-visited home pages on the web. Contrast is also one of the few accessibility criteria you can verify without a screen reader or a full audit. The FastMinify contrast checker computes the WCAG 2.2 ratio between two CSS colors (HEX, RGB, HSL, OKLCH, color() or named colors). As you type, it shows AA and AAA verdicts for normal text, large text and non-text elements. Nothing is sent to a server. It goes beyond a single color pair: a matrix mode lets you cross an entire foreground palette against an entire background palette in one pass. The rest of the tools sit on the Color & CSS hub.
The contrast mistakes that come up again and again
A #999999 gray on white gives a ratio of roughly 2.85:1, well below the AA threshold of 4.5:1. Yet it is one of the most common design choices for secondary text, placeholders and captions.
"Soft" brand colors (pastel blue, mint green, light orange) are often chosen for visual identity without ever being tested with white text on top.
A white headline works over the dark part of a hero photo's sky, but becomes unreadable over the bright part of a cloud. Contrast varies depending on where the text sits on the image.
outline: none with no replacement breaks keyboard navigation. Non-text contrast (SC 1.4.11) also covers focus indicators.
Which ratio to target for AA, AAA and large text
WCAG 1.4.3 (Contrast Minimum) requires a ratio of at least 4.5:1 for normal text at level AA. The stricter AAA level (criterion 1.4.6) raises the bar to 7:1. Nearly every legal accessibility requirement targets AA (Section 508/ADA in the US, EN 301 549 in Europe, RGAA in France). AAA remains recommended but is rarely mandated site-wide.
WCAG defines “large text” as text of at least 24px, which is 18pt. Text of at least 18.67px, which is 14pt, also counts when it is bold (weight 700 or more). Below those thresholds, text counts as normal even if it looks visually imposing. FastMinify works out which threshold applies from the size and weight you enter.
Since WCAG 2.1, criterion 1.4.11 (Non-text Contrast) requires a ratio of at least 3:1 between UI components and their adjacent color. That covers form field borders, checkboxes, meaningful icons and focus indicators.
How the contrast ratio is actually calculated
The WCAG 2.x ratio compares the relative luminance of the two colors. That is a value from 0 to 1 derived from linearized RGB channels, weighted 0.2126 for red, 0.7152 for green and 0.0722 for blue. The human eye perceives green far more intensely than blue. The final ratio is (L1 + 0.05) / (L2 + 0.05), where L1 is the lighter color's luminance. That is why two colors that look “clearly different” can end up with a close ratio. Two hues that look similar can have very different luminances.
Before
After
color() as input and converts them to sRGB before computing (via colorjs.io)The WCAG 2.x ratio has a known limitation: it treats “black on white” and “white on black” symmetrically, which does not always match real perception. APCA (Advanced Perceptual Contrast Algorithm), a candidate for WCAG 3, accounts for polarity, meaning light text on a dark background versus the reverse. It also accounts for font size, which gives a finer-grained judgment. FastMinify offers an optional APCA overlay alongside the official WCAG 2.2 ratio, not as a replacement, since WCAG 3 is not a published standard yet.
From a color pair to a full palette with the contrast checker
Open the contrast checker and paste your foreground and background colors in any CSS format (HEX, RGB, HSL, OKLCH, named). The ratio and the AA, AAA and non-text results update live. Adjust text size and weight to see the “large text” threshold apply automatically.
First, paste both colors
Foreground and background, in any valid CSS format. No manual conversion needed.
Then, set text size and weight
16px/400 by default (normal text). Switch to 24px or 18.67px+bold to test a heading, and the “large text” threshold (3:1/4.5:1) applies automatically.
Finally, read the verdict
Exact ratio such as 4.87:1, an AA, AAA, AA large or fail level for text, and a separate verdict for non-text contrast (3:1, SC 1.4.11).
A primary button usually has three color variants (normal, hover, disabled) that often go untested individually.
Instead of testing a design system's combinations one by one, paste your text colors in Row colors and your background colors in Column colors. Use one color per line, up to 16 per axis. The result is a grid with a verdict for every intersection, which you can filter by level (AAA, AA, Large AA or Failures).
Every check (colors, text size, matrix or pair mode, APCA options) is encoded into the URL. Copy the link from the address bar, or use the Share these settings button. Then paste it into a pull request, a ticket or a message to your designer. The page reopens in exactly the same state.
Making contrast a CI gate rather than a design back-and-forth
A manual checker suits palette design. To prevent regressions, contrast should also be verified automatically on every pull request. axe-core and Lighthouse CI catch most contrast failures on static text. They struggle more with text over images or gradients.
Basic example
Fast manual checks, no install, no data sent anywhere. The matrix mode, unique among these options, lets you audit a whole design system in a single pass, and the shareable URL makes design and dev collaboration easy. Trade-off: it is a manual check that does not replace an automated CI audit. It also does not detect contrast on an image or a complex gradient.
The built-in color picker shows the contrast ratio directly on the selected element on the live page, with computed styles, so no external tool is needed. Trade-off: one element at a time, which gets tedious across a full palette, with no matrix mode or link sharing.
An automated audit built into the CI pipeline systematically catches contrast regressions on every pull request, and covers accessibility beyond just contrast. Trade-off: it doesn't replace the upfront palette design phase, and can produce false negatives on text overlaid on an image.
Conclusion
Color contrast remains the most common accessibility failure on the web, and one of the easiest to fix once detected. AA (4.5:1) for normal text and 3:1 for large text and non-text elements are the two thresholds worth remembering before you ship a palette. The FastMinify contrast checker gives you the verdict as you type, in pair mode or in matrix mode for an entire design system. It never sends your brand colors to a server. An axe-core audit in CI prevents regressions, and the rest of the Color & CSS hub helps you build a consistent palette end to end.
Check your contrast now
Related Articles

Paste a token and a JWKS to check an RS256, ES256 or HS256 signature in your browser. How kid picks the key, measured errors and the claims to check.

HTTP/2 and HTTP/3 change how files travel, not how big they are. Measured sizes, compile times and bundling tests show what minification still saves.

Convert a Unix epoch to a readable date and back, tell seconds from milliseconds, and avoid time zone, JWT and clock change traps, all in your browser.