Have you checked a button's colours, only to notice that its label becomes difficult to read when you hover over it? A passing default combination doesn't establish that the rest of the component works.

A useful contrast review follows the actual text, control and surrounding surface through the states people encounter. The colour checker supplies a measurement; the reviewer still needs to choose the right pair and interpret the relevant requirement.

This guide combines four resources with an original, calculated example for a fictional SaaS form. It covers colour-pair checks and the surrounding review process, rather than claiming that one ratio certifies an entire page.

Design task

Identify what needs to remain visible

The starting question is what the person must read or recognise. A button label, a required field boundary and a focus indicator may appear together while needing separate checks.

For each component, record:

  • The text or visual cue being evaluated.
  • The state in which it appears.
  • The actual adjacent colour or background.
  • The relevant contrast criterion.
  • Any additional information needed to interpret the state.

This turns a general instruction such as “check the orange” into a specific task. The team can then evaluate a label against its button fill without confusing that measurement with the button's boundary against the page.

A contrast result belongs to a particular pair, state and criterion.

Establish the standard before reading the result

For WCAG 2.2 Level AA text contrast, W3C's Contrast Minimum explanation gives a 4.5:1 minimum for ordinary text and 3:1 for qualifying large text. Large text is at least 18 points, or at least 14 points when bold; a prominent position alone doesn't make a label large.

Non-text Contrast addresses visual information needed to identify controls, their states and meaningful graphics, with a 3:1 requirement against adjacent colours and specified exceptions. It doesn't require every decorative edge to become a high-contrast border.

Choose the relevant check before interpreting a tool's badge. A label and a required input boundary aren't interchangeable test subjects.

Include the states that change the pair

Make a small inventory of default, hover, pressed, focused, selected, validation and unavailable conditions where relevant. Also record combinations, such as keyboard focus on an already selected control.

The purpose isn't to invent states for every element. It is to identify where the implementation changes text, fill, border, opacity or adjacent content and therefore needs a fresh review.

A hover change may leave text readable while a selected state introduces a new label or background. Each should be reviewed in its actual context.

Resource kit

Use a checker that matches the evidence

ResourceDocumented roleUseful place in the workflowLimitation to retain
WebAIM Contrast CheckerForeground/background checks with text and non-text result categoriesVerify a known pair and retain a shareable inputIt doesn't discover every state or decide which pair matters
Accessible ColorsText/background review with size, weight and lightness-based alternativesExplore a correction to a text combinationSuggested colours still need review in the complete component
StarkContrast selection and suggestions in design and browser workflowsInspect colour relationships near the actual design or implementationFeature access and detected backgrounds need confirmation
Colour Contrast AnalyserDesktop colour sampling and copyable resultsCheck screen-based material and retain an assessment recordSampling and criterion selection remain review responsibilities

These resources are complementary options. A team doesn't need to adopt all four before performing a useful review.

WebAIM: verify the selected pair

WebAIM's checker accepts foreground and background values and displays separate outcomes for ordinary text, large text and graphical or interface content. It also supports foreground transparency and a permalink for the chosen pair.

This is useful when the team already knows the values being compared. Keep the component and state beside the result so a later reviewer can understand why that pair was entered.

webaim.orgVisit website ↗
WebAIM Contrast Checker official public tool or homepage preview
Existing public-tool capture visually inspected. Its displayed input values are not the article worked example.WebAIM Contrast Checker ↗ · Reviewed 2026-11-02 · Website preview

Existing public-page capture, visually inspected. Credit: WebAIM. Any values visible in this older preview belong to that capture, not the worked example below.

Accessible Colors: explore a text-pair correction

Accessible Colors exposes text colour, background, size, weight and AA/AAA choices. Its explanation describes finding alternatives by changing lightness while retaining the original direction as far as possible.

The live interface was inspected for this guide. It is useful for generating a correction candidate, but a candidate still needs to fit other uses of the same token.

accessible-colors.comVisit website ↗
Accessible Colors official public tool or homepage preview
Existing public-tool capture visually inspected. Its displayed input values are not the article worked example.Accessible Colors ↗ · Reviewed 2026-11-02 · Website preview

Existing public-tool capture, visually inspected. Credit: Accessible Colors. A generated suggestion isn't evidence that every use of that colour in a product has passed.

Stark: inspect the colour relationship in context

Stark's official contrast instructions describe selecting layers or browser elements, checking detected colours and applying suggestions. They also explain choosing different colours when automatic selection doesn't identify the intended pair.

That distinction matters on layered interfaces. The reviewer should confirm what the tool actually sampled before accepting a result.

Its current plans distinguish feature access. No particular subscription, complete scan coverage or automatic remediation outcome is assumed here.

getstark.coVisit website ↗
Stark official public tool or homepage preview
Actual public homepage capturedNovember2,2026 with optional cookies excluded. Marketing claims remain attributed; not a completed audit.Stark ↗ · Reviewed 2026-11-02 · Website preview

Actual public-page capture from November 2, 2026, visually inspected. Credit: Stark. This introduction isn't a completed audit or proof of access to a specific feature.

Colour Contrast Analyser: retain a screen-based record

The official Colour Contrast Analyser page describes a free desktop tool with colour sampling, foreground alpha support and copyable test results. It links Windows and Mac downloads.

This resource was added to Resource Box after verification. No application was installed or run for this article; the tool's documented capabilities support the shortlist, while the numerical exercise uses independent calculations and WebAIM cross-checks.

How the pieces work together

Capture the actual state before measuring

Begin with the screen and content that reproduce the condition. Note the component, state, theme and the surrounding surface.

For a browser implementation, inspect the effective styles rather than relying on a token name remembered from the design file. Cascading rules, opacity and inherited styles can change the pair that reaches the screen.

WebAIM's DevTools article explains inspecting computed colours and forcing hover or focus for review. Its interface instructions are older, so the exact browser controls should be checked in the current version.

Separate three kinds of evidence

Keep these checks in different rows of the review record:

  • Text pair: The label or message against the surface behind it.
  • Required visual cue: The boundary, selected marker or other information needed to recognise the control or state.
  • Interaction: Whether the state actually appears and remains usable during the intended input sequence.

A colour calculator can help with the first two. It doesn't prove that a focus indicator is clipped, hidden or shown at the right time; those questions require inspecting the component in use.

Correct the relationship, then review the token

A local correction might darken the background, change the foreground or replace the component's treatment. Choose the option that keeps the message readable and the hierarchy coherent.

Before changing a shared token, inspect its other uses. A darker fill that helps white button text might become unsuitable when the same colour appears as text on a dark surface.

Record whether the decision changes a shared rule or creates a narrowly justified exception. The next feature should be able to use the same reasoning.

Worked example

Review an invitation form across two states

Consider a fictional SaaS invitation form with an “Invite teammate” button and an email field on a cream surface. The exercise uses opaque sRGB values and ordinary-sized text, with no image, gradient or transparency behind the measured pairs.

The default button has white text on a dark orange fill. Its hover treatment changes the fill to a much lighter orange while retaining white text.

The table records independently calculated contrast ratios, rounded to one decimal for display. Calculations retained full precision for classification, and WebAIM's documented checker API independently confirmed the corresponding outcomes.

Item and stateForegroundBackgroundApproximate ratioReview outcome for this exercise
Button label, default#FFFFFF#A441156.3:1Meets the ordinary-text AA threshold
Button label, original hover#FFFFFF#EA9A592.3:1Fails the ordinary-text AA threshold
Button label, revised hover#FFFFFF#8D330D8.0:1Meets the ordinary-text AA threshold
Required field boundary, original#D1B8A3#FFF6F01.8:1Fails the applicable 3:1 boundary check
Required field boundary, revised#A44115#FFF6F05.9:1Meets that boundary contrast threshold
Original button-state specimen shows default6.3, failinghover2.3, revisedhover8.0 and requiredfieldboundary1.8 versus5.9 contrast ratios
Original opaque-sRGB exercise; summary ratios are display-rounded and underlying classification uses full precision. It is not a complete interface audit.Upslide Design Studio · Reviewed 2026-11-02

Original instructional specimen by Upslide. Ratios describe only the declared opaque colour pairs; they aren't measurements of a client product or certification of a complete interface.

Explain what the correction establishes

The original hover treatment fails because the label no longer has sufficient contrast against its own fill. The default result remains correct, but it doesn't cover that different pair.

Darkening the hover fill in this example restores the label's contrast. Another valid design might retain the lighter fill and use a darker foreground, provided the complete component and its other states are reviewed.

The input boundary has a different purpose. In this exercise it is explicitly required to identify the field on a same-coloured surface, so its contrast against the cream is evaluated as meaningful visual information.

This is not a rule that every decorative border on every button must pass a separate measurement. The record needs to explain what the visual cue is doing.

Reproduce the pair checks

Open WebAIM and enter each foreground/background pair from the table, preserving their roles. The checker displays categories for different content types; use the one relevant to the row being reviewed.

The original hover pair and revised hover pair provide reproducible starting points. A browser may display more decimal places or truncate differently from this table; a borderline result must be assessed without rounding it up to a passing threshold.

Then inspect the implemented state. The entered values are only useful if they match the actual foreground and surface in that state.

Record the checks the numbers don't answer

The invitation form also needs a visible keyboard focus indicator and a clear error message if the address can't be used. Those requirements aren't established by the button-label ratio.

W3C Focus Visible requires a visible keyboard-focus indicator. The separate Focus Appearance criterion is Level AAA; its additional area and focused/unfocused contrast conditions shouldn't be described as an identical AA requirement.

The review record should therefore retain the actual keyboard sequence, indicator appearance and applicable checks. Passing one contrast row doesn't close those other tasks.

Limitations and alternatives

Gradients, images and transparency need the actual background

The worked example intentionally uses flat opaque colours. A headline over a changing image or a translucent button over several surfaces introduces different pair relationships.

Inspect the background behind the information that must be read. An average for the whole photograph can conceal a locally difficult area behind a word.

A consistent opaque panel or a carefully controlled background can sometimes simplify the design and its review. If transparency remains important, record the underlying surface and the resulting composite rather than measuring only the uncomposited colour token.

Disabled controls have an exception, not a complete usability solution

W3C's text and non-text contrast criteria include exceptions for inactive controls. That doesn't make faint explanatory copy outside the control exempt, and it doesn't explain why the action is unavailable.

Keep the relevant instruction readable and clarify the prerequisite. The reviewer should distinguish an inactive control from an active action that merely looks subdued.

Contrast and colour-independent meaning are separate

A status can have strong contrast while still depending entirely on red versus green for meaning. W3C Use of Color addresses information that is conveyed only through colour.

Use clear wording and appropriate additional cues for important states. Upslide's colour-context guide discusses interpretation; this workflow focuses on measuring the visual relationships.

Continue in Resource Box and Inspire

Keep the review close to the source

Use Resource Box to open the checkers and original documentation. Retain the component/state record beside the result so another designer or developer can reproduce the decision.

For choosing or generating the underlying palette, continue with the colour palette tools guide. Its discovery task is separate from validating the pairs used by an implemented state.

Use inspiration as a reference, then test the implementation

Daily Inspire can help identify a presentation approach worth studying. Open and credit the original website when retaining the reference.

A screenshot doesn't establish keyboard behaviour, every theme or every state. Use it to describe what is visible, then perform the relevant checks in the actual implementation.

Frequently asked questions

Which colour contrast checker should a small team start with?

For known foreground/background values, a direct pair checker such as WebAIM is a practical starting point. Choose an in-context or desktop option when the task requires sampling or review near the working design, and retain the state and criterion with the result.

Does a passing default button cover its hover state?

No. If either colour changes, the pair needs review in that state. The worked example has a passing default label and a failing original hover label despite belonging to the same component.

Do the default and hover fills need 3:1 against each other?

Non-text Contrast doesn't generally require sequential state colours to contrast 3:1 with each other merely because they change. Evaluate the meaningful visual information against its adjacent colours in each state, and consider any separate focus-appearance requirement that applies.

Should a team round 4.499:1 up to 4.5:1?

No. W3C treats the thresholds as minimums, so rounding a lower value upward doesn't make it pass. Display rounding is acceptable for a summary, but the underlying classification must retain sufficient precision.

Do disabled controls need the same minimum contrast?

The cited criteria include inactive-control exceptions. Keep the explanation of the unavailable action readable and don't extend that exception to ordinary help text or an action that remains active.

Can a photograph's average contrast prove that overlaid text is readable?

No. The area behind the actual lettering needs evaluation, including difficult local regions. A single favourable average can hide a poor relationship where an important word appears.

Is an accessible-looking colour suggestion a finished fix?

It is a candidate correction. Review the actual component, relevant states, other token uses and implementation before accepting the change.

Does this workflow establish that a website is fully accessible?

No. It addresses specific contrast relationships and related visual-state checks. Keyboard operation, accessible names, content, structure and other requirements still need their own evidence.

Key takeaways

  • Record the component, state, pair and relevant criterion before measuring.
  • Recheck changed relationships instead of extending a default-state result.
  • Keep label, required visual cue and interaction evidence separate.
  • Use full precision for threshold decisions and retain reproducible inputs.
  • Confirm corrections in the implementation and review other uses of shared tokens.
  • Treat contrast as one part of the product review, with explicit exceptions and limits.

We help SaaS teams turn component inconsistencies into clearer design and implementation decisions. For a wider interface review, discuss the design work with Upslide.