Skip to content
easeweb
Search topics

Reading order that doesn't match the layout

An order summary writes each amount before its item and floats it to the right, and a delivery box is written column by column, so a screen reader pairs the wrong words.

WCAG 2.2
SC 1.3.2A
Required by
Section 508 · EN 301 549 (EU)
Broken <li><span class="amount">$28</span> Canvas tote</li>
The accessibility problem illustrated: No vision:Does delivery cost $67?
01

The problem

Screen reader and read-aloud users hear each amount before its item and the delivery options as loose columns, so they pair prices with the wrong items.

02

Try it

Read the order summary the way a screen reader does, and see which amount follows which name.

The panel shows what a screen reader reads from the top. Turn on “Show reading order” to number each piece in that order. Does every amount come after its own name? Broken 2 is the delivery box, written column by column.

Broken Can you fix this?

Order summary
  • $28 Canvas tote
  • $35 Linen tote
  • $4 Delivery
  • $67 Total

Reading from the top, a screen reader says:

  1. Order summary
  2. $28
  3. Canvas tote
  4. $35
  5. Linen tote
  6. $4
  7. Delivery
  8. $67
  9. Total

A recreated demo. The broken version is intentionally inaccessible.

03

The fix

Write the source in the order it is read, or tie each value that is out of place to its owner in text.

  1. 1Where order carries meaning, the markup carries it: written in that order, or with each item naming what it belongs to.
  2. 2Data drawn in rows and columns is written row by row, as a table, or each value names its row.
  3. 3Check every breakpoint and read with styles off, because layouts reorder at some widths.
Before

Amounts floated right, written before their items

<ul class="summary">  <li><span class="amount">$28</span> Canvas tote</li>  <li><span class="amount">$35</span> Linen tote</li>  <li><span class="amount">$4</span> Delivery</li>  <li class="total"><span class="amount">$67</span> Total</li></ul>
After

Source written in the order it is read

html

<ul class="summary">  <li><span>Canvas tote</span> <span class="amount">$28</span></li>  <li><span>Linen tote</span> <span class="amount">$35</span></li>  <li><span>Delivery</span> <span class="amount">$4</span></li>  <li class="total"><span>Total</span> <span class="amount">$67</span></li></ul>

html

<table class="delivery">  <tr>    <th scope="row">Standard</th>    <td>$4</td>    <td>3–5 days</td>  </tr>  <tr>    <th scope="row">Express</th>    <td>$9</td>    <td>Next day</td>  </tr></table>

Fixing this with an AI coding assistant? Get this guide as Markdown

04

Verify the fix

4 checks, no mouse.

Test with: Screen reader, Styles off

0 of 4 checked

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat after the layout or a component's styles change.

Limits

This is a starting pattern, not a guarantee for every application. It covers a short order summary and a small box of options. Drag-to-reorder lists, data grids and carousels have their own patterns and need their own checks. Whether an order changes the meaning is a judgement about the content, so read your real pages with a screen reader and with styles off.

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