Why contrast is about access—not taste
People read in bright sun on phones, on dim laptops, with color-vision differences, magnification, or eye fatigue. When text and controls blend into their backgrounds, the interface becomes guesswork. Good contrast ensures perceivability—the foundation for everything else. If users can’t perceive text, labels, focus states, or error messages, they cannot navigate or finish tasks, no matter how elegant the layout looks.
Practical targets that work
Different text sizes and weights require different contrast to remain readable. A practical, defensible approach for most product sites:
- Body text (14–18px regular): choose color pairs that are clearly readable in common conditions. Avoid “placeholder gray on white.”
- Large text (18px+ or bold): may tolerate a bit less contrast, but don’t push limits—many users still struggle.
- Interactive text (links, buttons, chips): ensure the label itself is readable and the control shape/hit area stands out from surroundings.
- Focus indicators: must be high contrast versus both the element and the background; a faint glow is not enough.
- Errors and validation states: don’t rely on color alone. Pair color with icons/text and ensure the text itself has strong contrast.
Where designs commonly fail
1) Placeholder-grey everything
Light gray on white looks modern but erodes readability: body copy, field labels, and secondary button text vanish, especially on mobile in bright light. Use meaningful contrast for all informative text. Reserve ultra-light grays for borders and non-essential flourishes.
2) Link color that’s pretty but indistinguishable
A tasteful pastel “brand blue” that’s only marginally different from surrounding text fails users with color-vision differences and in low-quality displays. Make links both color-distinct and stylistically distinct (underline by default or on focus/hover).
3) Buttons that are only colored outlines
Thin outline buttons with pale labels can lose both label and affordance. Provide a strong label color and sufficient contrast for the outline against the background. On hover/focus, avoid subtle shifts that still fail—use tone steps that remain readable in motion.
4) Gradients over photos and tinted overlays
Text over imagery creates variable backgrounds. Even if one area passes, others fail. Use a solid color backing (badge/pill), a sufficiently opaque overlay, or move text off the image. A 40–60% dark overlay behind light text is a dependable baseline; increase as needed.
5) Disabled states that become invisible
“Disabled” should signal non-interactivity without hiding information. Do not make text unreadable gray-on-gray. Keep labels legible; adjust only affordance cues (e.g., muted background, no hover).
6) Focus rings that designers remove
Removing the default focus outline without a replacement leaves keyboard and screen-reader users without orientation. Provide a thick, high-contrast ring that is obvious and consistent across themes.
Build contrast into your system, not just a page
Treat contrast as a design-system concern so that components ship with accessible defaults and remain so when reused.
- Color tokens: Define foreground/background pairs that meet targets and document intended uses (text, borders, surfaces, focus).
- State tokens: Provide accessible hover/active/disabled/error/success tones—pre-tested against both light and dark backgrounds.
- Elevation overlays: When surfaces stack (cards on backgrounds), ensure text inside each surface has adequate local contrast.
- Focus token: A single, high-contrast focus color (or ring style) used everywhere.
Dark mode and high-contrast themes
Dark themes are more than inverting colors. Avoid pure white text on pure black (halation and eye strain); choose slightly softened pairs that remain readable. Ensure borders and dividers are visible without collapsing to “barely there.” Provide a high-contrast mode for users who need even stronger separation.
Patterns, examples, and snippets
Link styles that hold up
/* Always distinguish by more than color */
a { text-decoration: underline; text-underline-offset: 2px; }
/* On focus, make it unmistakable */
a:focus-visible {
outline: 3px solid #1a73e8;
outline-offset: 2px;
}
Accessible focus ring
/* Don’t remove outlines unless you replace them with something better */
:focus { outline: none; }
:focus-visible {
outline: 3px solid #1a73e8; /* pick a strong token */
outline-offset: 3px;
border-radius: 4px;
}
Buttons with reliable contrast
.btn-primary {
color: #ffffff; /* label */
background: #0b57d0; /* surface */
}
.btn-primary:hover,
.btn-primary:focus-visible {
background: #0a4fc0; /* darker step stays readable */
}
.btn-outline {
color: #0b57d0; /* label remains readable */
border: 2px solid #0b57d0;
background: transparent;
}
.btn-outline:hover,
.btn-outline:focus-visible {
background: rgba(11,87,208,0.08); /* adds contrast without washing label */
}
Text on images
.hero {
position: relative;
}
.hero::before {
content: "";
position: absolute; inset: 0;
background: rgba(0,0,0,.45); /* adjustable overlay for legibility */
}
.hero h1, .hero p { position: relative; }
Testing contrast quickly (no special tools required)
- Squint test: Step back or zoom out to 50–67%. Can you still read body text and labels, and see which things are clickable?
- Bright light test: Take a phone into daylight. Pastel on pastel will fail immediately.
- Color-vision simulation: Toggle your design tool’s simulation or use a browser extension; ensure meaning persists without hue cues.
- Keyboard scan: Tab through the page. Is the focus ring always visible and distinct against varied backgrounds?
- Image overlays: Move text across different parts of the photo—does any area drop below readability?
Beyond text: icons, charts, and non-text contrast
Controls made of thin outlines or subtle iconography often fade. For icons that convey meaning (warning, success, filters), pair color with shape or text. For charts, ensure tick labels and legends are readable; never rely on color alone—use patterns, labels, or different marker shapes so trends are distinguishable.
Common pitfalls—and how to avoid them
- Using opacity to signal disabled: Dropping opacity can hurt contrast everywhere inside the component. Prefer distinct styles that keep text readable.
- “Accessible” placeholders: Placeholders are inherently low-contrast and ephemeral; use persistent labels above fields.
- Subtle focus glow: Blurry halos get lost against noisy backgrounds; use a solid, high-contrast outline.
- Single brand color for everything: One hue won’t work across text, surfaces, and states. Build a palette, not a color.
Working with brand teams: a practical checklist
- Start with a neutral text stack (e.g., near-black on white; near-white on deep gray for dark mode).
- Define accessible link and interactive colors that remain readable on both neutral surfaces and brand surfaces.
- Provide a tested scale of surface tones (e.g., surface-0 to surface-3) for cards, panels, and alerts.
- Choose a single, unmistakable focus style and lock it as a token used everywhere.
- Ship guidance for text over imagery: minimum overlay opacity, when to badge/pill text, and when to move text off the image.
Evidence to capture when poor contrast causes harm
When you can’t read instructions, labels, or errors—and as a result can’t complete a task—that’s a barrier. To document it:
- Screenshots that show the illegible text or control in context (include surrounding background and state).
- Date/time and URL, device and browser, and any adjustments (zoom, dark mode).
- Exact consequence (e.g., “Could not read prescription refill instructions,” “Missed booking cutoff,” “Abandoned purchase”).
Why this is also good business
Readable interfaces reduce support burden, increase task completion, and build trust. Strong contrast improves performance in sunlight and on low-end displays, creating more consistent outcomes across your customer base. What helps users with low vision also helps hurried shoppers on buses and parents checking out on dim phones.
How The Brensilber Law Firm helps (briefly)
If low-contrast designs or color-only cues denied you equal access to services, we help turn those experiences into action—focused on clear documentation, real impact, and outcomes that drive meaningful fixes. Contact us to discuss options, or visit our Resource Hub for more guides.