1.4.6 Contrast (Enhanced)

WCAG 2.2 · 1.4.6 AAA Perceivable

What it requires

The visual presentation of text and images of text must have a contrast ratio of at least 7:1 against its background. Large-scale text — at least 18 point, or 14 point bold — needs a ratio of at least 4.5:1. This is the enhanced (AAA) counterpart to 1.4.3 Contrast (Minimum), which only asks for 4.5:1 and 3:1.

The same exceptions apply: text that is part of an inactive (disabled) control, pure decoration, text not visible to anyone, or text that is part of a logotype or brand name has no contrast requirement.

People with low vision who do not use contrast-enhancing assistive technology, and people with colour-vision deficiencies that reduce perceived luminance contrast. The enhanced ratio also helps older users with age-related vision loss and anyone reading in poor lighting, on dim or glare-prone screens, or in bright sunlight. When text falls below 7:1, these users may find body copy slow, tiring, or impossible to read.

How to detect it

Checks for Contrast (Enhanced)
Check How Catches
Measure ratios Sample foreground and background with a contrast checker or DevTools colour picker. Body text below 7:1; large text below 4.5:1.
States & layers Test hover, focus, visited, and text over images or gradients. Passing default text that fails in another state or over busy backgrounds.
Automated scan Run axe or similar — most tools default to the AA 4.5:1 threshold. Flat colour failures; will not reliably test the AAA 7:1 level or text on images.

How to fix it

  1. Identify each text/background pair and measure its current contrast ratio.
  2. Darken text or lighten the background (or vice versa) until body text reaches 7:1 and large text 4.5:1.
  3. Define accessible colour tokens so the ratio holds across themes and components.
  4. For text over images, add a solid scrim or overlay behind the text rather than relying on the image.
  5. Re-measure every interactive state and re-test.
<p style="color: #1a1a1a; background: #ffffff">
  Body text at #1a1a1a on white is about 17.4:1 — well above 7:1.
</p>

Copy-paste tests

Automated coverage

The axe-core rule color-contrast-enhanced flags failures of this criterion. Run it via the axe DevTools browser extension or axe-core in CI. Automated tools only catch some failures.

Run this in the browser console

contrast-enhanced-check.js
// Read-only: surfaces small/normal-weight text for manual 7:1 contrast review.
const suspects = [...document.querySelectorAll('p, span, li, a, label, td')]
  .filter(el => el.textContent.trim().length > 0)
  .filter(el => {
    const s = getComputedStyle(el);
    const px = parseFloat(s.fontSize);
    const bold = parseInt(s.fontWeight, 10) >= 700;
    // "Large text" (24px, or 18.66px bold) only needs 4.5:1, so review the rest.
    return px < 24 && !(bold && px >= 18.66);
  })
  .map(el => ({ el, color: getComputedStyle(el).color, size: getComputedStyle(el).fontSize }));
console.table(suspects);
suspects.forEach(s => (s.el.style.outline = '2px solid magenta'));

What to check manually: measure each flagged element's actual foreground/background ratio against 7:1 (4.5:1 for large text) with a contrast checker, and confirm text over gradients or images stays above 7:1 across the whole background.