Skip to content

Contrast Minimum

DodaTech 4 min read

title: "Contrast Minimum — SC 1.4.3" weight: 14 description: "Learn WCAG Success Criterion 1.4.3 Contrast Minimum: 4.5:1 for normal text and 3:1 for large text, exceptions for incidental text and logotypes, and how to test and remediate contrast failures." date: 2026-06-28 lastmod: 2026-06-28 tags: [accessibility, color-contrast]


WCAG Success Criterion 1.4.3 Contrast Minimum requires that text and images of text have a contrast ratio of at least 4.5:1 for normal text and 3:1 for large text, with exceptions for incidental text, decorative text, and logotypes.

## What You'll Learn

You will understand SC 1.4.3 requirements, exceptions, how to test compliance, and how to fix contrast failures for text elements.

## Why It Matters

SC 1.4.3 is one of the most commonly failed WCAG criteria. Lawsuits frequently cite contrast failures because they affect readability for a large portion of users and are easy to verify.

## Real-World Use

A news site uses gray text (#888) for bylines and dates. A user with low vision cannot read the article metadata. An accessibility audit flags this as a SC 1.4.3 violation. The fix is a simple color change to #555, which passes AA.

## SC 1.4.3 Evaluation

```mermaid
flowchart TD
  A[Text Element] --> B{Is it incidental?}
  B -->|Yes, decorative only| C[Exempt]
  B -->|No| D{Is it a logotype?}
  D -->|Yes| E[Exempt]
  D -->|No| F{Is it large text?}
  F -->|Yes| G[3:1 minimum]
  F -->|No| H[4.5:1 minimum]

Testing SC 1.4.3

Use a contrast checker to verify every text element passes the applicable threshold.

<!-- SC 1.4.3 examples -->
<!-- FAIL: 2.8:1 against white -->
<p style="color: #999;">Insufficient contrast text</p>

<!-- PASS AA: 5.1:1 against white -->
<p style="color: #555;">Sufficient contrast for normal text</p>

<!-- PASS large text exemption -->
<p style="color: #777; font-size: 24px;">
  Large text at 3.9:1 -- passes AA large text exemption
</p>

<!-- Exempt: decorative text in a logo -->
<span class="logo-text">CompanyName</span>
/* SC 1.4.3 compliant text styles */
.text-body {
  color: #333;
  background: #fff;
  /* 12.6:1 -- passes AAA */
}

.text-secondary {
  color: #555;
  background: #fff;
  /* 5.1:1 -- passes AA */
}

.text-meta {
  color: #666;
  background: #fff;
  /* 4.6:1 -- passes AA */
}

.text-disabled {
  color: #999;
  background: #fff;
  /* 2.8:1 -- fails AA, but exempt for disabled */
}
// SC 1.4.3 compliance checker
function checkSC143(element) {
  const style = window.getComputedStyle(element);
  const color = style.color;
  const bgColor = style.backgroundColor;
  const fontSize = parseFloat(style.fontSize);
  const fontWeight = parseInt(style.fontWeight);
  const text = element.textContent.trim();

  // Check exemptions
  if (!text || element.closest('[role="presentation"]')) {
    return { status: 'exempt', reason: 'decorative' };
  }

  const ratio = getContrastRatio(color, bgColor);
  const isLarge = fontSize >= 24 || (fontSize >= 18.7 && fontWeight >= 700);
  const passes = isLarge ? ratio >= 3 : ratio >= 4.5;

  return {
    element: element.tagName,
    text: text.slice(0, 30),
    ratio: ratio.toFixed(1),
    isLarge,
    passes,
    threshold: isLarge ? '3:1' : '4.5:1'
  };
}

Common Mistakes

  • Applying the 4.5:1 threshold to large text that only needs 3:1
  • Not checking text on hover, focus, or active states
  • Forgetting that placeholder text is not exempt
  • Assuming disabled text is always exempt
  • Not testing text on image backgrounds
  • Ignoring text in components like tooltips and popovers
  • Using opacity to reduce text visibility without changing contrast

Practice and Challenge

Practice 1: Determine if #777 on #fff passes AA for 16px text. Practice 2: Find three text colors on your site that pass SC 1.4.3. Practice 3: Find one text color that fails and suggest a fix. Practice 4: Test a button label in both default and hover states. Practice 5: Check if a disabled input label is exempt from contrast requirements.

Challenge: Create a SC 1.4.3 audit checklist for a form page. Include all text elements: labels, inputs, placeholders, helper text, error messages, buttons, and links. For each, document the color pair, contrast ratio, applicable threshold, and pass/fail status.

FAQ

What text is exempt from SC 1.4.3?

Incidental text (part of an inactive UI component), decorative text, and logotype text are exempt.

Is placeholder text exempt?

No. Placeholder text must meet contrast requirements.

Does SC 1.4.3 apply to images of text?

Yes. Images of text must meet the same contrast requirements as rendered text.

What about captcha text?

Captcha text is typically exempt if it is intentionally distorted for security purposes.

How do I handle hover and focus states?

All states must meet contrast requirements. Test text in every interactive state.

Does SC 1.4.3 apply to placeholder text in inputs?

Yes. Placeholder text in form inputs must meet the same contrast requirements.

Mini Project

Create a SC 1.4.3 testing tool that scans a web page, identifies all text elements, extracts their computed color and background color, calculates contrast ratios, and reports which elements pass or fail the applicable threshold. Include exemptions for disabled and decorative elements.

What's Next

Contrast Enhanced - SC 1.4.6 covers the stricter AAA contrast requirements.

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro