WCAG Color Contrast: Meeting AA & AAA Without Killing Design

Low contrast text fails WCAG and locks out millions of users. Learn the exact contrast ratios required for AA and AAA compliance, how to test them, and how to fix issues while keeping your brand intact.


Color contrast is the most common accessibility failure

If there's one accessibility issue that appears on nearly every website, it's insufficient color contrast. The WebAIM Million study has consistently found low contrast text on over 80% of home pages - making it the single most widespread WCAG failure on the web.

The reason is straightforward: designers choose colors that look good on their high-resolution monitors in well-lit offices. But for the 300+ million people worldwide with low vision, color blindness, or age-related vision changes, those subtle grays and trendy pastels can render text unreadable.

This guide explains the WCAG contrast requirements, identifies the most common problem areas, and shows you how to maintain beautiful design while meeting accessibility standards.

Understanding contrast ratios

WCAG measures color contrast as a ratio between the luminance (perceived brightness) of the foreground color and the background color. The scale runs from 1:1 (no contrast - same color on same color) to 21:1 (maximum contrast - black on white).

The standard defines three threshold levels:

WCAG AA - The practical minimum

  • Normal text (under 18pt / 24px, or under 14pt / 18.5px bold): minimum 4.5:1
  • Large text (18pt+ / 24px+, or 14pt+ / 18.5px+ bold): minimum 3:1
  • UI components and graphical objects (icons, form borders, focus indicators): minimum 3:1

Level AA is the standard most laws require and the level you should target for compliance.

WCAG AAA - The gold standard

  • Normal text: minimum 7:1
  • Large text: minimum 4.5:1

Level AAA isn't required by most regulations, but meeting it where feasible improves readability for everyone - not just users with disabilities.

What counts as "large text"?

WCAG defines large text as 18pt (24px) or larger at regular weight, or 14pt (18.5px) or larger at bold weight. Large text gets a lower contrast threshold because its size makes it inherently easier to read. But be careful - 18px, a common body font size in modern design, is not large text by WCAG standards. You need 24px or larger.

Common contrast problem areas

Certain design patterns consistently fail contrast requirements. Knowing where to look saves time during audits.

Light gray text on white

This is the most common offender. Designers use light gray for "secondary" text - timestamps, captions, metadata - to create visual hierarchy. But the result often fails contrast standards.

The lightest gray that passes 4.5:1 against pure white (#FFFFFF) is #767676. Anything lighter fails. That popular #999999 many designers reach for? It only achieves a 2.8:1 ratio - well below the minimum.

Placeholder text in forms

Browser default placeholder colors typically fail contrast requirements. Chrome's default placeholder color on a white input is approximately #757575, which barely passes at 4.6:1. But if your input has a light gray background, even that might fail. Custom-styled placeholders in lighter shades almost always fail.

Remember that placeholder text should never replace labels, but when you do use it, it still needs to be readable.

Text overlaid on images

Hero banners and cards with text over photographs are a contrast minefield. The contrast varies depending on the image content beneath the text - it might pass in one area and fail in another.

Solutions include:

  • Adding a semi-transparent overlay between the image and text
  • Using a solid background behind the text area
  • Adding a text shadow for additional separation (though this alone may not be sufficient)
  • Choosing images with consistent dark or light areas where text is placed

Colored buttons and links

Brand-colored buttons often fail when light brand colors are used with white text, or dark brand colors with dark text. A medium blue button with white text might look fine but fail the 4.5:1 threshold.

Links that rely solely on color to distinguish them from surrounding text have an additional requirement: the color difference between the link and the surrounding text must be at least 3:1 (or the link must have a non-color indicator like an underline).

Disabled and inactive states

WCAG technically exempts "inactive" UI components from contrast requirements, so disabled buttons and inputs don't need to meet the 4.5:1 threshold. However, users still need to perceive that a control exists and is disabled. Using extremely low contrast for disabled states can make them invisible, confusing users about what options are available.

Maintaining your brand while meeting standards

A common concern from design teams is that accessibility requirements will force them to abandon their brand colors. In practice, this is rarely the case. Here are strategies that work:

Darken, don't replace

Most brand colors that fail contrast can be adjusted by darkening the shade slightly. If your brand blue is #4A90D9 (3.1:1 against white), shifting to #2A6AB5 (5.1:1) keeps the same hue while passing AA. Users won't notice the difference - but users with low vision will notice the improvement.

Use color strategically

You can still use your lighter brand colors in places where contrast requirements are less strict: large headings (3:1 threshold), decorative elements (no contrast requirement), backgrounds, and borders. Reserve your darkened accessible variants for body text, buttons, and form elements.

Test early in the design process

Checking contrast after the design is "done" leads to frustrating last-minute changes. Build contrast checking into your design workflow from the start. Many design tools have built-in or plugin-based contrast checkers that give you real-time feedback as you choose colors.

Tools for checking contrast

You don't need to calculate contrast ratios by hand. These tools make checking quick and easy:

  • Browser DevTools - Chrome, Firefox, and Edge all show contrast ratios when you inspect text elements. Chrome's color picker also suggests colors that would meet AA and AAA thresholds.
  • WebAIM Contrast Checker - A simple web tool where you enter foreground and background hex codes and see the resulting ratio.
  • Stark - A popular plugin for Figma, Sketch, and Adobe XD that checks contrast within your design tool.
  • Operating system tools - macOS includes a Digital Color Meter and accessibility inspector. Windows has the Accessibility Insights tool from Microsoft.

How AccessGuard helps with color contrast

Checking individual color pairs works well during design, but a live website may have hundreds of text elements across dozens of pages. AccessGuard's contrast checker scans every text element on your pages and flags any that fall below WCAG thresholds.

Each contrast issue includes the specific colors found, the calculated ratio, the required ratio for that text size, and the WCAG criterion violated. This gives your design team the precise information they need to fix each issue - no guesswork involved.

Combined with the other checks AccessGuard runs, you get a complete picture of your site's accessibility in minutes rather than days of manual testing.

Start scanning for free

Join thousands of developers making the web more accessible.

Get started