Skip to content
easeweb
Search topics

Status dots told apart by colour alone

An order list marks each order with a small green, amber or red dot and a key above it, so only the dot's colour says which payment failed.

WCAG 2.2
SC 1.4.1A
Required by
Section 508 · EN 301 549 (EU)
Broken .status-failed { background: #e03131; }
The accessibility problem illustrated: Colour vision:Which payment failed?
01

The problem

People who can't tell red from green can't see which order's payment failed, because only the colour of a dot says so.

02

Try it

Find the order whose payment failed.

Turn on the simulation to see the list as someone with deuteranopia, a red–green colour vision deficiency, sees it. Can you still tell which order it is?

Broken Can you fix this?

BrokenA status shown by the dot's colour, named only for screen readers

Your orders

  • Delivered
  • On its way
  • Payment failed
  1. Order 1045 18 Oct $32.00 On its way
  2. Order 1044 15 Oct $64.00 Payment failed
  3. Order 1041 2 Oct $18.00 Delivered
  4. Order 1038 24 Sep $96.00 Delivered

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Write each status as a word beside its dot, or give each status a shape of its own.

  1. 1Every status shown in colour is also shown in words, or by a shape of its own.
  2. 2Status words need 4.5:1 against their background; an icon or dot with no word beside it needs 3:1.
  3. 3Text only a screen reader gets is not the second cue: it has to be seen.
Before A status shown by the dot's colour, named only for screen readers
<h2>Your orders</h2><ul class="legend">  <li>    <span class="status status-delivered"></span>    Delivered  </li>  <li>    <span class="status status-shipped"></span>    On its way  </li>  <li>    <span class="status status-failed"></span>    Payment failed  </li></ul><ol class="orders">  <li>    <a href="/orders/1044">Order 1044</a>    <span>15 Oct</span>    <span>$64.00</span>    <span class="status status-failed"><span class="visually-hidden">Payment failed</span></span>  </li>  …</ol>
After

The status written beside the dot

<h2>Your orders</h2><ol class="orders">  <li>    <a href="/orders/1044">Order 1044</a>    <span>15 Oct</span>    <span>$64.00</span>    <span class="status status-failed">Payment failed</span>  </li>  …</ol>

04

Design ideas

A status can keep its colour and still be read without it.

Four more ways to draw the same two orders, in the guide’s colours. Two say which payment failed in words; two say it only with colour.

In the design file

  • Write each status in words wherever it appears.
  • Where a word can’t fit, give each status a shape of its own, not only a colour.
  • Write the ratio beside each status colour, at least 4.5:1 for its words and 3:1 for an icon with no word beside it.
  • Draw the phone layout with each status word wrapping under the total, not dropped.

Passes

  • Order 1044 $64.00 Payment failed
    Order 1041 $18.00 Delivered
    Soft pill with an icon and the word The word sits on a pale tint of the status colour, set in a deep shade of it: #b42323 on #fdecec is 5.74:1, and #1e6b30 on #e7f5ea is 5.83:1. The tint keeps the colour coding; the word and the icon carry the meaning.
  • Needs your attention
    Order 1044 $64.00
    Delivered
    Order 1041 $18.00
    Orders grouped under what they need The failed order sits on its own under “Needs your attention”, above the rest under “Delivered”, so the heading says what each order needs and the dots only add to it. It suits a list where one status asks the customer to act.

Fails

  • Order 1044 $64.00 Payment failed
    Order 1041 $18.00 Delivered
    Colour stripe down the card’s edgeWCAG 1.4.1 A 4px stripe in the status colour down the left of each order card, as many dashboards draw it. The two cards differ only in the stripe’s hue, #e03131 against #2f9e44, which are 1.31:1 apart.
  • Order 1044 $64.00 Payment failed
    Order 1041 $18.00 Delivered
    Row tinted by its statusWCAG 1.4.1 A pale red or pale green fill behind the whole row, soft and current. The two tints, #fdecec and #e7f5ea, are 1.01:1 apart, so without their hue the two rows look the same.
05

Verify the fix

5 checks, no mouse.

Test with: Colour vision simulation, Contrast measurement, Zoom, Forced colors

0 of 5 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after the status colours or the order list's layout change.

Limits

This is a starting pattern, not a guarantee for every application. Colour values are examples; measure your own palette against your real backgrounds. This guide covers a status shown by a coloured marker. Colour used alone in other places fails the same criterion and has its own guides: links in body text marked only by colour, required fields marked only by colour and form errors that don't say how to fix them. An instruction that points to something by its colour, "the orders in red need your attention", is covered in instructions that rely on colour, shape or position. A selected option shown by a fill alone, and chart lines told apart by colour, are the same failure and get their own guides later. Check the complete pages with people who rely on them.

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

Keep this fixed as your code changes.

Turn guides like this into rules your coding agents and CI follow, then have the result retested with a keyboard and screen readers.

How retests work