( Perceivable / WCAG 1.4.11 )
UI component has insufficient contrast
What is this issue?
A UI component’s visual boundary (its border, outline, or the graphical parts of an icon required to understand its function) has a contrast ratio below 3:1 against the color immediately adjacent to it. This is a different measurement from text contrast: 1.4.11 evaluates the edges and shapes that tell a user a control exists and where its boundaries are, not the label text sitting inside or beside it.
Common failures include a form input with a pale grey 1px border on a white page background, a custom checkbox styled with a border too close in value to its background, and a status icon (a warning triangle, a required-field asterisk) with a fill color too light against the page to register as a distinct shape.
Why does this matter?
Sighted users with typical vision unconsciously use subtle visual cues (a faint shadow, a 1px border) to locate interactive elements, but those same cues can disappear entirely for someone with reduced contrast sensitivity. A form with pale, low-contrast input borders doesn’t just look understated; for a low-vision user, the fields themselves become nearly invisible, indistinguishable from empty page background until a cursor happens to land in one by accident.
This isn’t limited to a specific eye condition. Anyone viewing a screen in bright sunlight, with a lower-quality or older display, or at reduced brightness to save battery loses the same faint boundaries a designer relied on looking fine on a calibrated studio monitor. A component that “reads as clean and minimal” in design review can simply be missing to a real user in a real lighting condition.
Who is affected?
- Low vision users: rely on visible boundaries, not just label text, to locate where a control starts and ends; a border below 3:1 can make an entire input or button effectively disappear against its background.
- Cognitive disabilities: users who scan a page quickly for recognizable interactive shapes (buttons, checkboxes) lose that visual scaffolding when component boundaries blend into the background, increasing the effort needed to locate and operate controls.
What users experience
Grace has moderate low vision and uses 150% browser zoom with increased OS contrast settings whenever a site allows it. On a multi-step signup form, the text input borders are styled at #e0e0e0 on a white background (a ratio around 1.4:1). She can see the placeholder text floating on the page but can’t tell where the clickable, typeable boundary of each field actually is, so she clicks just above and beside several inputs before landing inside one, adding a guessing step to every field on the form.
How do I fix it?
Increase the color of the component’s border, outline, or required graphical parts until it reaches at least 3:1 contrast against the color directly adjacent to it, usually the page or container background. This works because 3:1 is the threshold WCAG’s research identified as reliably distinguishable for users with moderate contrast sensitivity loss, the same underlying logic as the large-text contrast minimum, applied to shapes instead of glyphs.
Check every state a component’s resting boundary can appear in: unfocused, unchecked, unselected. Focus and hover states have their own related requirements, but a component’s default, at-rest boundary still needs to clear 3:1 on its own; a focus ring alone doesn’t excuse an invisible resting-state border. For icons, this only applies to the graphical parts required to understand the icon’s meaning; purely decorative flourishes are exempt.
Code Examples
/* Input border: #e0e0e0 on #ffffff ≈ 1.4:1 - fails */
input {
border: 1px solid #e0e0e0;
background: #ffffff;
}
/* Custom checkbox: barely visible outline */
.checkbox {
border: 2px solid #d0d0d0;
background: #ffffff;
}/* Input border: #767676 on #ffffff ≈ 4.5:1 - passes */
input {
border: 1px solid #767676;
background: #ffffff;
}
/* Custom checkbox: clearly visible boundary */
.checkbox {
border: 2px solid #595959;
background: #ffffff;
}Both fixes darken only the border color, leaving the fill and label text untouched. #767676 and #595959 both clear the 3:1 minimum with margin to spare against white, which matters because the goal isn’t the bare minimum ratio: it’s a boundary a user under real-world viewing conditions, not a calibrated monitor in a dim office, can still make out.
Common Mistakes
Mistake: “This is the same check as text contrast, so if our text passes, we’re covered.” Text contrast (1.4.3) and non-text contrast (1.4.11) are separate success criteria measuring different things: glyph color versus border and icon color. A page can have perfectly readable 7:1 body text sitting inside a form field whose border is nearly invisible at 1.4:1; passing one criterion says nothing about the other.
Mistake: “Minimalist, borderless design is inherently more accessible.” Removing visible borders entirely doesn’t satisfy 1.4.11 by avoiding the question: if the component still needs a boundary to be usable (most form inputs and custom controls do), a box-shadow or background-color difference has to do the job a border would have, and that replacement still needs to clear 3:1 against its surroundings.
Mistake: “We only need to fix this on hover or focus, since that’s when people interact with it.” The resting, unfocused state is what a user has to locate in the first place before they can hover or focus it. A component invisible at rest fails 1.4.11 regardless of how good its hover or focus styling looks: you can’t focus a control you can’t find.
How RedFlag Detects This
Guidance only: RedFlag documents this issue but does not currently flag it; verify manually. RedFlag’s coverage model records criterion 1.4.11’s detection evidence as docs_only: there is no border-, outline-, or icon-contrast calculation anywhere in the scan engine today. The automated color-contrast check (criterion 1.4.3) only evaluates text nodes: it does not extend to element borders, box-shadows, or the fill color of SVG icons, so a non-text contrast failure produces no automated finding of any kind.
False negative: every non-text contrast failure on a scanned page is a false negative in this sense: nothing is ever automatically flagged, so a form with invisible input borders passes every RedFlag scan silently. False positive: not applicable, since no automated violation is ever raised for this criterion. Manual step: sample the border, outline, or icon color of every interactive component and informational icon against its adjacent background using a contrast checker, since this is a genuinely manual measurement today.
Manual Testing
- Open the page in Chrome or Firefox and open DevTools’ Elements panel.
- Select an input, button, or custom checkbox/radio control and check its computed
border-color(orbox-shadowcolor, if that’s what forms the visible boundary). - Sample that color and the adjacent background color with the WebAIM contrast checker or DevTools’ color picker; confirm the ratio meets 3:1.
- Repeat for any icon whose graphical shape is required to understand a control’s function (a required-field asterisk, a warning icon with no adjacent text); decorative icons with no functional role can be skipped.
- Check the component at its default, unfocused, unchecked state specifically, since a good focus ring doesn’t compensate for an invisible resting-state boundary.
Related WCAG Success Criteria
1.4.11 Non-text Contrast: User interface components and graphical objects required to understand content must have at least 3:1 contrast against adjacent colors. This rule is a direct check of that requirement applied to borders, outlines, and functional icons.
1.4.3 Contrast (Minimum): The related but distinct text-only criterion; see Text does not have enough colour contrast. A component can pass 1.4.3 on its label text while failing 1.4.11 on its own border, or vice versa.
Related Issues
Text does not have enough colour contrast is the text-only sibling criterion: RedFlag’s one automated contrast check, which does not extend to the non-text boundaries this rule covers.
Text does not meet enhanced AAA contrast requirements applies the same stricter-threshold logic to text at Level AAA, worth checking alongside this rule on pages targeting a higher bar than AA.
Text contrast fails after a hover, focus, or state change covers the equivalent state-dependent problem for text; a component’s border can suffer the identical failure mode, going invisible only on hover or focus, which this static check doesn’t isolate either.
Text spacing overrides break the layout shares this rule’s “low vision users adjusting default presentation” theme, though it addresses spacing rather than color.
References
- W3C Understanding 1.4.11: Non-text Contrast
- WebAIM Contrast Checker
- WebAIM: Contrast and Color Accessibility
Frequently asked questions
Does 1.4.11 apply to disabled buttons and controls?
No. WCAG explicitly excludes inactive user interface components: a disabled button that cannot currently be operated has no non-text contrast requirement. The requirement applies to components in their active, usable state.
Do decorative icons need to meet the 3:1 minimum?
No. The requirement only applies to graphical objects required to understand the content, such as an icon that is the only cue for a control's function, or an icon conveying information with no adjacent text. A purely decorative icon with no functional or informational role is exempt.
Is 3:1 the same threshold as large text under 1.4.3?
Yes, numerically. Both large text (1.4.3) and non-text UI components (1.4.11) share a 3:1 minimum, though they are separate success criteria measuring different kinds of content: one measures glyphs, the other measures borders, icons, and graphical indicators.
Does a focus indicator need to meet this same 3:1 requirement?
Focus indicators have their own related criteria, 2.4.11 Focus Not Obscured and 2.4.13 Focus Appearance, rather than falling under 1.4.11 directly, though the same 3:1 contrast principle carries over. Treat focus-indicator contrast as a separate check from a component's resting-state border.
Can axe-core or any automated tool catch non-text contrast failures?
Some automated tools attempt it, but reliably measuring contrast for a border, icon, or graphical indicator against a variable adjacent background is a harder computation than text contrast, and RedFlag does not currently run an automated check for this criterion; see How RedFlag Detects This below.