What contrast do text and background actually need to be readable for everyone?

On this page

The working threshold is meeting the minimum contrast ratio for the text’s size, not whatever happens to look readable on your monitor. Per current WCAG guidance, normal text needs a contrast ratio of at least 4.5:1 against its background to meet Level AA, while large text needs only 3:1. The enhanced Level AAA tier raises those to 7:1 for normal text and 4.5:1 for large text. Large text is defined as roughly 18pt and up, or 14pt and up when bold, which lands near 24px regular or 18.5px bold in practice. The ratio is the answer, and it is a measured number, not a judgment call.

The reason the minimum scales with size is that legibility itself scales with size. Larger letterforms have thicker strokes and more area, so the eye can resolve them against a weaker contrast; small text has thin strokes that vanish first when contrast drops. That is why the standard relaxes the requirement for big type and tightens it for small. The ratio is computed from the relative luminance of the two colors, a formula that weights green most heavily and blue least, which is why two colors that feel different to you can still fail and two that feel similar can pass. Perceived difference and measured contrast are not the same quantity, and the gap between them is exactly where designers get fooled.

The trap shows up in a real, recognizable place: the light gray helper text under a form field, set in #999 on white. It reads cleanly on a bright office display, so the designer signs off. Run the numbers and #999 on #FFF is about 2.8:1, well under the 4.5:1 that 14px body-adjacent text demands. On a phone in sunlight, or for a user with mild low vision, that label is gone. A second case is the colored button label that everyone overlooks: white text on a mid-tone brand blue can land around 3:1 or 4:1, fine for a large heading but short of 4.5:1 for ordinary button copy, so the most-clicked element on the page quietly fails. In both, the color looked fine and was not compliant, and the two facts were never the same test.

Worth flagging: these minimums govern text and its immediate background, not every color relationship on the page. Pure decoration, large background flourishes, and inactive disabled controls are treated differently, and graphical elements and active UI component states fall under a separate 3:1 rule rather than the text ratios. Logotypes are also exempt. The exception that catches people is text laid over a photo or gradient: there the background luminance shifts across the area, so the ratio must hold at the worst spot the text crosses, not the average, which is why a scrim or text shadow is often the real fix. So you do not need 4.5:1 between two adjacent brand swatches that carry no text; you need it where words sit on a fill, at every point those words touch.

Stop judging contrast by eye and start measuring it for the size in question. For every text-and-fill pairing, pull the two hex values into a contrast checker, read the ratio, and compare it to the floor for that text size: 4.5:1 for normal, 3:1 for large at AA. If a pairing falls short, darken the text or lighten the background until it clears, and treat the looks-fine impression as a hint to verify rather than a verdict.

Leave a comment

Your email address will not be published. Required fields are marked *