Skip to content

Wcag Contrast Requirements

DodaTech 4 min read

title: "WCAG Contrast Requirements — AA, AAA, Normal, and Large Text" weight: 13 description: "Master WCAG contrast thresholds: AA requires 4.5:1 for normal text and 3:1 for large text, AAA requires 7:1 for normal text and 4.5:1 for large text, with specific definitions for large text sizing." date: 2026-06-28 lastmod: 2026-06-28 tags: [accessibility, color-contrast]


WCAG defines four contrast thresholds: AA normal text at 4.5:1, AA large text at 3:1, AAA normal text at 7:1, and AAA large text at 4.5:1 -- with large text defined as 18pt font size or 14pt bold and above.

## What You'll Learn

You will understand each WCAG contrast threshold, when each applies, how to determine large text status, and how to target the right level for your project.

## Why It Matters

Different thresholds apply to different text sizes. Using the wrong threshold leads to false passes or unnecessary design restrictions. Understanding the distinctions ensures accurate compliance assessment.

## Real-World Use

A designer creates a banner with 24pt text at 3.5:1 contrast. Using the large text threshold, this passes AA (minimum 3:1) even though it would fail AA for normal text. The designer correctly applies the large text exemption.

## Contrast Requirements Flow

```mermaid
flowchart TD
  A[Text Element] --> B{What size?}
  B -->|>= 18pt| C[Large Text]
  B -->|>= 14pt bold| C
  B -->|< 18pt and not bold| D[Normal Text]
  B -->|< 14pt bold| D
  C --> E{AA: 3:1, AAA: 4.5:1}
  D --> F{AA: 4.5:1, AAA: 7:1}

Applying the Thresholds

Determine text size and weight first, then apply the correct threshold.

<!-- Large text examples -->
<p style="font-size: 24px;">
  This is large text (24px = 18pt) -- needs 3:1 for AA
</p>

<p style="font-size: 16px; font-weight: 700;">
  This is also large text (16px = 12pt, but bold at 700)
  -- needs 3:1 for AA
</p>

<!-- Normal text examples -->
<p style="font-size: 16px;">
  Normal text at 16px -- needs 4.5:1 for AA
</p>

<p style="font-size: 14px; font-weight: 600;">
  Semi-bold at 14px -- still normal text (needs 14pt bold for exemption)
</p>
/* WCAG AA compliant text sizes and contrasts */
.large-text-aa {
  font-size: 18pt;
  color: #777; /* 3.9:1 against white -- passes AA large */
  /* Would fail AA normal (needs 4.5:1) */
}

.normal-text-aa {
  font-size: 12pt;
  color: #555; /* 5.1:1 against white -- passes AA normal */
}

.aaa-text {
  font-size: 12pt;
  color: #444; /* 6.8:1 against white -- passes AAA normal */
}
// Threshold checker
function checkContrastThreshold(ratio, fontSize, fontWeight) {
  const isLargeText =
    fontSize >= 18 || // 18pt
    (fontSize >= 14 && fontWeight >= 700); // 14pt bold

  return {
    ratio,
    isLargeText,
    aaPass: isLargeText ? ratio >= 3 : ratio >= 4.5,
    aaaPass: isLargeText ? ratio >= 4.5 : ratio >= 7,
    threshold: isLargeText ? '3:1 (AA) / 4.5:1 (AAA)' : '4.5:1 (AA) / 7:1 (AAA)'
  };
}

console.log(checkContrastThreshold(3.5, 24, 400));
// { aaPass: true, aaaPass: false }

Common Mistakes

  • Applying the normal text threshold to all text
  • Using px instead of pt for size comparison (1pt = 1.333px)
  • Not considering bold weight for large text exemption
  • Assuming all heading text qualifies as large text
  • Forgetting that small print and footnotes must meet normal thresholds
  • Using the large text exemption for text that is not actually large
  • Not documenting which threshold applies to which elements

Practice and Challenge

Practice 1: Determine the threshold for 20px text (not bold). Practice 2: Determine the threshold for 16px bold text. Practice 3: Check if #666 on #fff passes AA for 18pt text. Practice 4: Find a color that passes AA for large text but fails for normal. Practice 5: Calculate the minimum contrast for AAA large text.

Challenge: Create a text style guide with 10 typography variants (headings h1-h6, body, small, caption, button, link). For each variant, specify the font size, font weight, and minimum contrast ratio required for WCAG AA. Include the recommended color hex values that meet those thresholds.

FAQ

What counts as large text?

Text that is at least 18pt (24px) or at least 14pt (18.7px) bold.

Does font-family affect large text calculation?

No. Only font size and font weight matter for the large text definition.

What about icons and pictographic text?

Icons that convey meaning are subject to non-text contrast (1.4.11), not text contrast.

Do I need to calculate in pt or px?

WCAG defines thresholds in pt. Convert: 1pt = 1.333px.

What if text is on a gradient background?

Test the worst-case contrast within the gradient area. Use the lowest contrast ratio.

Is there a contrast requirement for disabled text?

Disabled text has no minimum requirement, but it should still be distinguishable from the background.

Mini Project

Create a text size and contrast reference card that shows: WCAG levels (AA/AAA), text types (normal/large) with size definitions, threshold ratios, example color pairs that pass each threshold, and a quick-reference table for common font sizes. Format it as a printable cheat sheet.

What's Next

Contrast Minimum - SC 1.4.3 covers the specific requirements of WCAG Success Criterion 1.4.3.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro