WCAG Success Criteria · Level AAA

WCAG 1.4.6: Contrast (Enhanced)

WCAG 1.4.6 requires a minimum contrast ratio of 7:1 for normal text and 4.5:1 for large text between foreground and background colors, going beyond the AA threshold to ensure readability for users with low vision, color deficiencies, or those operating in challenging lighting conditions.

  • Level AAA
  • Wcag
  • Wcag 2 2 aaa
  • Perceivable
  • Accessibility

What This Rule Means

WCAG 1.4.6 Contrast (Enhanced) is a Level AAA success criterion under Guideline 1.4 (Distinguishable). It requires that the visual presentation of text and images of text have a contrast ratio of at least 7:1 against their background. For large text — defined as at least 18pt (approximately 24px) for regular weight, or at least 14pt (approximately 18.67px) for bold weight — the required contrast ratio is at least 4.5:1. This is a significant step up from the Level AA criterion 1.4.3, which requires only 4.5:1 for normal text and 3:1 for large text.

The contrast ratio is calculated using the relative luminance of the two colors involved, as defined in the WCAG specification. The formula considers the linearized RGB values of the foreground and background colors to produce a ratio ranging from 1:1 (no contrast, identical colors) to 21:1 (maximum contrast, black on white or white on black).

This criterion applies to all rendered text in the interface, including text within images, icons containing text, and text rendered in canvas elements where the rendered output is accessible. It affects headings, body copy, labels, placeholder text in form fields when it conveys meaningful information, button labels, link text, navigation items, and any other textual content visible on the screen.

WCAG 1.4.6 shares the same official exceptions as criterion 1.4.3. The following are explicitly excluded from the requirement:

  • Incidental text: Text or images of text that are purely decorative, that are not visible to anyone, or that are part of a picture that contains significant other visual content. An example would be text visible in the background of a photograph used as decoration.
  • Logotypes: Text that is part of a logo or brand name has no contrast requirement. This applies to the wordmark portion of a company's logo only, not to adjacent body copy or UI labels.
  • Inactive user interface components: Text within disabled form controls, disabled buttons, or other interface elements that are not currently operable are exempt. However, this exemption should be applied sparingly — inactive UI should still be perceivable enough to communicate its existence.

A pass under this criterion means that every instance of text content that is not explicitly excepted meets or exceeds the 7:1 ratio (or 4.5:1 for large text). A fail occurs when any non-excepted text falls below these thresholds, even by a small margin. The contrast must hold across all supported states — hover, focus, active, visited — since the criterion applies to the rendered presentation in each of these states.

Why It Matters

Approximately 2.2 billion people worldwide live with some form of vision impairment, according to the World Health Organization. Of these, hundreds of millions experience conditions that directly reduce the ability to distinguish between colors or perceive low-contrast text, including cataracts, glaucoma, macular degeneration, and various forms of color vision deficiency. For this population, interfaces that meet only the AA contrast threshold of 4.5:1 can still present significant barriers to reading and comprehension.

The 7:1 ratio demanded by this criterion is specifically calibrated to account for the contrast sensitivity loss associated with aging eyes and common low-vision conditions. Research in vision science shows that an individual with moderately reduced contrast sensitivity — roughly equivalent to a person with 20/80 vision using corrective lenses — can experience effective contrast reduction of approximately three to one. A 7:1 design ratio, after this perceptual reduction, still delivers roughly 2.3:1 perceived contrast, which is near the minimum threshold at which text becomes readable. Without this headroom, such users may be entirely unable to read the content.

Consider a real-world scenario: a 68-year-old bank customer managing their finances online on a bright afternoon, sunlight reflecting off their laptop screen. Even with fully functional vision in clinical terms, glare and the natural reduction in contrast sensitivity that accompanies aging can make medium-gray text on a white background completely illegible. A design that achieves 7:1 contrast in normal conditions will still be usable in this context; one that barely clears 4.5:1 will not.

Beyond disability-specific impact, high-contrast text benefits virtually all users in suboptimal reading environments: bright outdoor sunlight, worn screens with reduced backlighting, monochrome e-ink displays, and low-quality projectors in meeting rooms. The enhanced contrast requirement therefore represents not just an accessibility improvement but a broad usability upgrade.

From a search engine optimization perspective, high-contrast text tends to correlate with cleaner, more structured typographic hierarchies. While search engines do not directly measure contrast, the design discipline required to meet AAA contrast standards typically produces pages with stronger visual hierarchy and better readability scores, which contribute to lower bounce rates and longer dwell times — signals that indirectly benefit SEO performance.

  • color-contrast-enhanced: This is the primary axe-core rule associated with WCAG 1.4.6. It evaluates the computed foreground and background colors of all text nodes in the DOM and calculates their contrast ratio using the WCAG luminance formula. The rule flags any text element where the contrast ratio falls below 7:1 for normal-sized text or below 4.5:1 for large text (as defined by computed font-size and font-weight). It reports the actual ratio found, the required ratio, and the element responsible, making remediation straightforward. The rule differentiates between normal and large text using the same size thresholds WCAG defines: 18pt (24px) for regular weight and 14pt (18.67px) for bold.
  • Limitations requiring manual testing: Automated rules like color-contrast-enhanced cannot detect contrast failures in several important scenarios. Text rendered inside <canvas> elements is invisible to the DOM-based scanner and requires manual visual inspection. Text overlaid on gradient or photographic backgrounds presents a particularly difficult challenge: the contrast ratio varies across the text depending on which part of the gradient or image falls behind each letter. Automated tools typically sample a single background color or report inconclusive results in these cases. Text that changes color on hover or focus must also be tested in each interactive state manually, since automated scans typically capture only the default rendered state. Additionally, text whose contrast depends on CSS custom properties resolved at runtime via JavaScript may not be evaluable during a static scan.

How to Test

  1. Automated scan with axe DevTools: Install the axe DevTools browser extension (Chrome or Firefox). Open the target page, activate the extension, and run a full-page scan. In the results panel, filter by the rule ID color-contrast-enhanced or search for "enhanced" in the issues list. For each flagged element, the panel displays the element, the actual contrast ratio, and the required ratio. Note any elements reported as needing review rather than a definitive pass or fail — these typically involve computed backgrounds that could not be resolved and require manual verification.
  2. Automated scan with Lighthouse: Open Chrome DevTools, navigate to the Lighthouse tab, and run an accessibility audit. Lighthouse uses axe-core internally, so it will surface the same color-contrast-enhanced violations. The report groups them under Accessibility and links to each failing element. Be aware that Lighthouse audits the page in its default state and does not test interactive states such as hover or focus.
  3. Manual color sampling: Use the browser's developer tools color picker or a dedicated tool such as the Colour Contrast Analyser (TPGi) to manually sample the foreground and background colors of text elements. This is especially important for text over images, gradients, or semi-transparent backgrounds. Sample multiple points along the text where the background varies and check that the minimum contrast ratio across all sampled points meets 7:1 for normal text or 4.5:1 for large text.
  4. Testing interactive states: Using browser DevTools, force elements into their hover, focus, active, and visited states (via the :hov panel in Chrome DevTools or equivalent). Re-run the contrast check in each state to ensure color changes applied via CSS pseudo-classes do not introduce contrast failures. Pay particular attention to link visited states, button hover states, and form field focus indicators.
  5. Screen reader verification (NVDA + Firefox): While screen readers do not directly test contrast, verifying that text is accessible to NVDA confirms it is real text in the DOM (not an image of text without an alternative). Launch Firefox, open NVDA, and browse the page using the reading cursor. Any text NVDA cannot read should be investigated to determine whether it is an image of text that requires contrast testing at the image level.
  6. Screen reader verification (VoiceOver + Safari on macOS): Activate VoiceOver with Command+F5 and navigate the page using VO+Right Arrow. As with NVDA, text that VoiceOver skips or reads incorrectly may indicate non-standard text rendering that requires manual contrast inspection.
  7. Grayscale simulation: Enable grayscale display mode via operating system accessibility settings (available on Windows, macOS, iOS, and Android). This removes all color information and makes contrast differences immediately visible. Text that becomes difficult to read in grayscale mode almost certainly fails the enhanced contrast requirement.

How to Fix

Body Text on Light Background — Incorrect

<!-- Fails 1.4.6: #767676 on #ffffff yields approximately 4.54:1,
     which passes AA (1.4.3) but falls far short of the 7:1 AAA requirement -->
<p style='color: #767676; background-color: #ffffff;'>
  Please review our terms and conditions before proceeding.
</p>

Body Text on Light Background — Correct

<!-- Passes 1.4.6: #595959 on #ffffff yields approximately 7.0:1,
     meeting the enhanced contrast requirement for normal-weight body text -->
<p style='color: #595959; background-color: #ffffff;'>
  Please review our terms and conditions before proceeding.
</p>

Colored Heading on Branded Background — Incorrect

<!-- Fails 1.4.6: brand blue #4A90D9 on white #ffffff yields approximately 3.0:1.
     Even though this is a heading and may appear large, bold headings at
     common web sizes (e.g. 20px bold) may not qualify as WCAG "large text"
     depending on rendering, and 3.0:1 fails even the large-text 4.5:1 threshold -->
<h2 style='color: #4A90D9; background-color: #ffffff;'>
  Welcome to Our Services
</h2>

Colored Heading on Branded Background — Correct

<!-- Passes 1.4.6: dark navy #1A3A5C on white #ffffff yields approximately 12.6:1.
     Exceeds the 7:1 requirement for normal text and comfortably surpasses
     the 4.5:1 large-text requirement. Brand identity is preserved through
     the use of a darker shade within the same hue family. -->
<h2 style='color: #1A3A5C; background-color: #ffffff;'>
  Welcome to Our Services
</h2>

Text Over a Gradient Background — Incorrect

<!-- Fails 1.4.6: The gradient transitions from a dark color that provides
     adequate contrast on the left to a light color that provides insufficient
     contrast on the right. Text spanning the full width will fail at some point. -->
<div style='background: linear-gradient(to right, #1a1a1a, #cccccc); padding: 20px;'>
  <p style='color: #ffffff;'>Create your account today and get started.</p>
</div>

Text Over a Gradient Background — Correct

<!-- Passes 1.4.6: A semi-transparent dark overlay behind the text ensures
     that foreground text maintains at least 7:1 contrast regardless of
     the underlying gradient value at any point beneath the text block. -->
<div style='background: linear-gradient(to right, #1a1a1a, #cccccc); padding: 20px;'>
  <p style='color: #ffffff; background-color: rgba(0,0,0,0.75); padding: 8px 12px; display: inline-block;'>
    Create your account today and get started.
  </p>
</div>

Placeholder Text in Form Input — Incorrect

<!-- Fails 1.4.6: default browser placeholder styling is typically around
     #aaaaaa on white, yielding approximately 2.32:1. If placeholder text
     conveys meaningful information (e.g. format hints), it must meet contrast requirements. -->
<input type='text' placeholder='DD/MM/YYYY' style='background: #ffffff;'>

Placeholder Text in Form Input — Correct

<!-- Passes 1.4.6: Override the default placeholder color to achieve 7:1 contrast.
     Also adds a visible label as best practice, since placeholders disappear on input. -->
<label for='dob'>Date of Birth</label>
<input type='text' id='dob' placeholder='DD/MM/YYYY'
  style='background: #ffffff; color: #000000;'>
<style>
  input::placeholder {
    color: #595959; /* approximately 7.0:1 on white — meets AAA */
  }
</style>

Common Mistakes

  • Relying solely on AA-passing color combinations without checking AAA thresholds: Many designers use the common medium-gray #767676 on white, which passes 1.4.3 at roughly 4.54:1 but fails 1.4.6 by a significant margin. Always verify against the 7:1 target, not just 4.5:1.
  • Assuming large text exemptions apply too broadly: The large-text exception (4.5:1 instead of 7:1) applies only to text that is at least 18pt (24px) at regular weight or at least 14pt (18.67px) at bold weight. Text at 20px regular weight does not qualify and must still meet 7:1.
  • Ignoring contrast in interactive states: Applying a lighter color on hover to create a visual affordance without checking whether the hovered state still meets 7:1. For example, darkening a button background on hover while keeping white text may still pass, but lightening text on hover frequently causes failures.
  • Overlooking CSS custom property chains: Defining a text color as var(--color-primary) where --color-primary is set globally but overridden locally in component scope without re-verifying contrast. The effective rendered color may differ from the global token value and produce a failing ratio in specific component contexts.
  • Treating disabled state exemption as a design license: Using the inactive UI exemption as justification for styling disabled elements with 1:1 contrast (invisible text), making users unable to know a field exists at all. Disabled elements should still be visually perceivable even if they are exempt from the 7:1 requirement.
  • Not testing text rendered over images or video: Placing text directly over a hero image or video background and checking contrast only against the average color rather than the lightest portion of the image that the text traverses. The minimum contrast must hold across every pixel beneath the text, not on average.
  • Applying contrast fixes only to desktop breakpoints: Responsive designs that use different background colors at mobile breakpoints — for example, switching from a white desktop background to a light beige card background — may introduce new contrast failures at smaller screen sizes that were not present during desktop testing.
  • Forgetting focus indicator text contrast: When a custom focus ring or focus state changes both the background and the text color of a focused element, the new text-to-background combination in the focused state must independently satisfy the 7:1 ratio, regardless of what the default state achieves.
  • Assuming logo exemption extends to adjacent descriptive text: Placing a tagline or product description in the same typographic block as a brand logo and claiming the logo exemption for the entire block. The exemption applies strictly to text that is an integral part of the logo itself, not to any nearby copy.
  • Not validating contrast after CSS framework overrides: Importing a third-party component library or CSS framework that resets or overrides text colors with values below 7:1, then shipping those defaults without auditing. Framework defaults are almost never calibrated to AAA contrast standards.

Relation to Turkey's Accessibility Regulations

Turkey's Presidential Circular 2025/10, published in Official Gazette No. 32933 on June 21, 2025, establishes mandatory digital accessibility requirements for a broad range of institutions and organizations operating in Turkey. The circular mandates conformance with WCAG 2.2 at Level AA as the baseline standard. The covered entity types include public institutions and agencies, e-commerce platforms, banks and financial service providers, hospitals and healthcare organizations, telecommunications companies with 200,000 or more subscribers, travel agencies, private transport companies, and private schools authorized by the Ministry of National Education (MoNE).

WCAG 1.4.6 Contrast (Enhanced) is a Level AAA criterion and is therefore not a mandatory requirement under the Presidential Circular. Organizations that achieve only Level AA compliance — the legally mandated baseline — will not be in violation of the circular for omitting the 7:1 enhanced contrast requirement, provided they satisfy the AA threshold of 4.5:1 for normal text defined by criterion 1.4.3.

However, achieving AAA conformance on contrast represents a meaningful commitment to inclusive design that extends well beyond minimal legal compliance. For public institutions, which have the broadest obligation to serve all citizens regardless of disability status, voluntarily adopting the enhanced contrast standard signals a genuine dedication to universal access. Healthcare organizations and hospitals — sectors where patients may already be under physical or cognitive stress, or may be interacting with digital systems in challenging conditions such as bright clinical lighting — have a particularly strong practical case for exceeding the minimum contrast threshold. Similarly, banks and financial service providers whose customers increasingly include elderly users are well-positioned to benefit from the credibility and user trust that AAA contrast compliance communicates.

Organizations pursuing ISO 30071-1 certification, European EN 301 549 alignment, or any international procurement process that evaluates accessibility maturity will find that Level AAA contrast conformance strengthens their position. As digital accessibility enforcement matures globally and in Turkey specifically, criteria currently at Level AAA have historically migrated toward mandated status in successive regulatory updates. Adopting enhanced contrast now positions organizations ahead of likely future requirements and reduces the cost of eventual remediation.

For organizations using the Accsible overlay SDK, the platform's contrast adjustment tools can assist users in applying high-contrast modes at the widget level, providing a compensatory layer that helps bridge the gap between the published design's contrast levels and an individual user's needs. This does not substitute for meeting the criterion at the source-code level, but it provides meaningful runtime support for users who require enhanced contrast and visit sites that have not yet achieved full AAA conformance.