🎨 CSS

CSS Color Contrast Checker

Compare text and background colors with mathematical WCAG 2.1 relative luminance equations. Inspect real-time AA/AAA validation badges.

Curated Accessible Color Presets
WCAG 2.1 Contrast Ratio
21.00:1
Normal Text AA (4.5:1)
Normal Text AAA (7:1)
Large Text AA (3:1)
Large Text AAA (4.5:1)
UI Components AA (3:1)
Interactive Visual Preview
The quick brown fox jumps over the lazy dog. Standard body text requires a minimum 4.5:1 contrast ratio for WCAG AA compliance.
Large Heading Text (18pt+ / 24px+) requires 3:1 contrast.
Tailwind CSS Classes

Understanding WCAG 2.1 Relative Luminance and Accessibility Standards

Quick Answer: The CSS Color Contrast Checker calculates the exact mathematical contrast ratio between foreground text and background colors according to the W3C Web Content Accessibility Guidelines (WCAG) 2.1. It delivers instantaneous PASS or FAIL ratings across Level AA and AAA specifications for standard body copy, large display typography, and interactive UI components completely within your browser, ensuring zero network latency and total privacy.

Color contrast is not merely an aesthetic consideration; it is the fundamental baseline of inclusive digital design. Millions of users worldwide experience some form of visual impairment, including age-related vision loss, cataracts, macular degeneration, and congenital color vision deficiencies (such as protanopia, deuteranopia, and tritanopia). In addition, situational visual impairments affect every user when viewing laptop screens or mobile devices under direct sunlight, in low-light environments, or on displays with low color gamuts.

To establish universal readability benchmarks, the World Wide Web Consortium (W3C) established mathematical algorithms for evaluating color contrast. This tool implements the exact W3C relative luminance pipeline, converting sRGB coordinates into linear photometric radiance to compute precise contrast ratios ranging from 1:1 up to 21:1.

Retinal Physiology and the Human Spectral Sensitivity Curve

Human vision perceives different wavelengths of electromagnetic radiation with vastly unequal sensitivity. The human retina contains two primary classes of photoreceptors: rods, which mediate scotopic vision in dim lighting, and cones, which mediate photopic color vision in well-lit environments. Humans possess three distinct types of cone cells:

The human visual cortex integrates signals from these three cone classes into an overall sensation of brightness, formalized by the Commission Internationale de l'Eclairage (CIE) as the photopic luminosity function, denoted as V(lambda). The peak of this function lies at approximately 555 nanometers in the yellow-green band. Consequently, the human eye perceives green light as substantially brighter than red or blue light of equal radiant physical power. A pure green pixel emits far more perceived luminance than a pure blue pixel containing the same digital 8-bit signal intensity.

The Mathematical Pipeline: From 8-Bit sRGB to Linear Luminance

Digital computer screens encode color values using the sRGB standard, storing channel intensities as 8-bit integers ranging from 0 to 255. However, these digital numbers do not scale linearly with physical light emission. Computer displays apply an electro-optical transfer function (commonly known as a gamma curve, roughly proportional to an exponent of 2.2) to match the logarithmic response curve of the human eye.

To calculate true optical luminance, the WCAG algorithm first uncompresses the non-linear sRGB channels back into a linear radiometric scale. The conversion follows a precise piecewise mathematical function:

1. Normalize each 8-bit channel to a decimal value C_srgb between 0.0 and 1.0 by dividing by 255:

R_norm = R / 255
G_norm = G / 255
B_norm = B / 255

2. Linearize each normalized channel value using the piecewise sRGB inverse transfer function:

if (C_norm <= 0.04045) {
  C_linear = C_norm / 12.92;
} else {
  C_linear = Math.pow((C_norm + 0.055) / 1.055, 2.4);
}

The linear segment below 0.04045 eliminates infinite slope near absolute black, preventing numerical instability and quantization noise in digital image processors. Above this threshold, the exponential power curve accurately reflects physical display gamma.

3. Calculate total relative luminance (Y) by applying human cone spectral weights to the linearized channels:

Luminance (Y) = 0.2126 * R_linear + 0.7152 * G_linear + 0.0722 * B_linear

Notice the distribution of weights: green accounts for over 71.5% of total perceived luminance, red contributes 21.3%, and blue accounts for a mere 7.2%. This mathematical distribution explains why navy blue text on a black background fails contrast tests miserably, whereas lime green text on black excels.

The Relative Contrast Ratio Formula: Why (L1 + 0.05) / (L2 + 0.05)?

Once the relative luminance values for both colors are computed, the contrast ratio is calculated using a simple division between the lighter color (L1) and the darker color (L2):

Contrast Ratio = (L1 + 0.05) / (L2 + 0.05)

Where L1 is strictly greater than or equal to L2. This ensures the resulting ratio is always expressed as a number greater than or equal to 1.0 (conventionally written as X:1).

The presence of the constant 0.05 in both the numerator and denominator is a crucial engineering parameter. It models the effect of ambient room flare, also known as veiling glare. In any real-world environment, ambient light from overhead lamps or windows reflects off the glass surface of the monitor, ensuring that even a pixel turned completely off (pitch black, luminance 0.0) never delivers absolute zero light to the viewer. In addition, the 0.05 term prevents mathematical division-by-zero errors when evaluating pure black.

Because the maximum possible luminance is 1.0 (pure white, #ffffff) and the minimum is 0.0 (pure black, #000000), the theoretical maximum contrast ratio achievable in WCAG 2.1 is:

Maximum Ratio = (1.0 + 0.05) / (0.0 + 0.05) = 1.05 / 0.05 = 21:1

Conversely, comparing two identical colors produces (L + 0.05) / (L + 0.05) = 1:1, representing zero readable contrast.

Deciphering WCAG 2.1 Conformance Levels

The W3C defines clear, legally actionable tiers for digital contrast compliance:

Level AA (Minimum Standard for Production Applications)

Level AA is the universally recognized baseline for commercial web platforms, corporate SaaS applications, and public software. It specifies two typographic thresholds:

Level AAA (Enhanced Accessibility for High-Acuity Systems)

Level AAA represents an enhanced accessibility standard, frequently mandated for governmental portals, healthcare records, educational software, and specialized accessibility tools:

Non-Text Contrast: Success Criterion 1.4.11

Introduced in WCAG 2.1, Success Criterion 1.4.11 expanded accessibility requirements beyond typographical glyphs to include user interface components and graphical objects. A minimum contrast ratio of 3:1 is mandatory for:

The Emerging APCA Model: Preparing for WCAG 3

While WCAG 2.1 has served the web community for over a decade, visual scientists have identified limitations in its mathematical foundation. The standard WCAG 2.1 formula is purely symmetric; it yields the exact same 4.5:1 ratio whether text is black on a purple background or purple on a black background. However, due to human pupil dynamics and optical scattering, light text on a dark background (dark mode) scatters light across the retina differently than dark text on a light background.

The upcoming WCAG 3 guidelines introduce the Accessible Perceptual Contrast Algorithm (APCA). Rather than generating a simple ratio, APCA calculates Lightness Contrast (Lc) based on modern spatial vision models. APCA incorporates:

While APCA represents the future of perceptual color science, WCAG 2.1 remains the current legal and regulatory standard worldwide.

Handling Alpha Transparency and Composite Color Layering

A common hurdle in modern UI engineering is testing semi-transparent colors, such as modal overlays, glassmorphic card backdrops, or dropdown menus using rgba() or hsla(). Because WCAG formulas require solid RGB values, you must compute the effective solid composite color produced when the translucent layer overlays its underlying background.

Alpha compositing uses standard linear alpha blending (assuming the background is fully opaque):

C_composite = (C_foreground * alpha) + (C_background * (1 - alpha))

For example, if a black card with 50% opacity (rgba(0, 0, 0, 0.5)) sits on top of a pure white background (#ffffff, or 255 across all channels), the composite color is:

Channel = (0 * 0.5) + (255 * (1 - 0.5)) = 0 + 127.5 = 128 (#808080)

Once you calculate the effective composite solid color (in this case #808080), you can enter that hex value into our contrast checker to verify whether white or black text placed inside that card meets the necessary 4.5:1 ratio.

Common Contrast Anti-Patterns in Digital Products

Avoiding these widespread design errors will immediately improve the quality and accessibility of your software:

Legal and Regulatory Landscape

Ensuring compliance with WCAG 2.1 Level AA is not merely an ethical best practice; it is increasingly a strict legal requirement across global markets:

By integrating our real-time contrast checker into your daily design and development workflow, you ensure your software remains beautiful, legally compliant, and genuinely accessible to every user on the web.

Frequently Asked Questions

Why does this tool gamma-correct RGB values before comparing contrast?

Raw 0 to 255 RGB values do not map linearly to perceived brightness on computer displays. Gamma correction transforms channel intensities back to true linear light output, which is strictly required by the WCAG 2.1 relative luminance formula.

Why is green weighted much more heavily than blue in the luminance equation?

Human eye cone receptors are substantially more sensitive to green wavelengths (0.7152 weight) than blue (0.0722 weight) or red (0.2126 weight). Weighting channels by human photoreceptor sensitivity ensures calculated contrast reflects true human vision.

What is the maximum contrast ratio possible in WCAG specifications?

The maximum ratio is exactly 21:1, which occurs exclusively between pure black (#000000) and pure white (#ffffff). Any other color combination will generate a ratio below 21:1.

Why do large text and UI components only need a 3:1 ratio instead of 4.5:1?

Large typography (18pt regular or 14pt bold and above) has thicker glyph strokes that are legible at lower contrast. Interactive user interface boundaries fall under WCAG 2.1 criterion 1.4.11, which requires 3:1 for locational clarity rather than reading acuity.

Does this tool evaluate semi-transparent or translucent background colors?

No. Both inputs are calculated as fully opaque hexadecimal values. If your interface implements alpha overlays or glassmorphic backdrops, calculate the composite solid color against its underlying background first, then test that color here.

Can I type three-character shorthand hex codes like #fff instead of six characters?

Yes. The text input fields accept three-digit shorthand notation and automatically expand each character (such as #fff expanding to #ffffff) before computing relative luminance and contrast ratios.

What is the difference between WCAG 2.1 contrast and the emerging APCA contrast model?

WCAG 2.1 uses a symmetric mathematical ratio based solely on relative luminance, giving identical numbers regardless of whether text is dark-on-light or light-on-dark. APCA (Advanced Perceptual Contrast Algorithm) models human spatial vision, accounting for font weight, polarity, and optical halo effects.

How does font weight influence actual perceived contrast on screen?

Thin, light font weights (such as 100 to 300) have narrow optical strokes that blend into background pixels, requiring higher contrast to remain readable. Bold weights (600 to 800) offer broader stroke widths that remain readable at slightly lower contrast ratios.

What are the legal requirements for WCAG 2.1 AA compliance in digital software?

Many jurisdictions mandate WCAG 2.1 AA compliance under legislation such as the Americans with Disabilities Act (ADA Title III), Section 508 in the United States, and European Standard EN 301 549 for public sector and enterprise software.

Why does the contrast formula add 0.05 to both luminance values?

The 0.05 constant accounts for ambient room illumination reflecting off the surface of physical display screens. It also prevents catastrophic division by zero when calculating contrast against pure black (luminance 0).