- Success Criterion 1.3.2
- Conformance level A
- W3C reference F49
Layout Table That Reads in a Nonsensical Order When Linearized
1.3.2 — Meaningful Sequence
Scenario
Setting
A food delivery app's restaurant menu
What’s wrong
A layout table reads in a nonsensical order when linearized — the reading order scrambles the content.
Example
<table>
<tr><td rowspan="3"><img alt="Margherita Pizza" src="pizza.jpg"></td>
<td rowspan="3"><img alt="Classic Burger" src="burger.jpg"></td></tr>
<tr><td>Margherita Pizza</td><td>Classic Burger</td></tr>
<tr><td>$12.99</td><td>$9.99</td></tr>
</table> Why it matters
Linearized, this reads as image, image, then both dish names together, then both prices together, so no price is ever paired with its own dish.
How to test
Disable CSS on a layout table and read top to bottom: if the reading order doesn't match the intended content flow, it fails.
How to fix
Build visual grids with CSS grid or flexbox on real containers, and reserve table markup for genuinely tabular data.
<div class="menu-item">
<img alt="Margherita Pizza" src="pizza.jpg">
<p>Margherita Pizza</p>
<p>$12.99</p>
</div>
<div class="menu-item">
<img alt="Classic Burger" src="burger.jpg">
<p>Classic Burger</p>
<p>$9.99</p>
</div> Outcome
Now every dish's name and price are announced together, one item at a time.
Who is affected
Screen reader users and anyone using a linearized or reflowed view lose the pairing between a dish, its image, and its price.
Learn more
- Understanding Understanding document (opens in a new tab)
- Technique Related technique (opens in a new tab)
Related scenarios
- CSS Layout Changes That Scramble the Screen Reader’s Reading Order
- Word Spelled Out Letter by Letter Instead of Read as a Word
- Text Columns Faked With Spaces Read Aloud Out of Order
- CSS Reordering That Makes Code Order Differ From Visual Order
- Multi-Column Article Whose Code Order Interleaves the Columns
- Prices or Labels Positioned Visually Near the Wrong Product in Code