Do not format tables with white space characters
F34 is F33's sibling, a documented failure under the same two rules, and it is the table-shaped version. Rows and columns drawn with spaces have no cells. Three things go together, and the third gets forgotten. There is no way to say which cell is a header, no way to tie a header to the data underneath it, and no way to jump to a particular cell. That last loss is what breaks table reading, because moving through a table cell by cell is how a screen reader user reads one at all. The same reflow problem applies as on F33, so the layout falls apart visually too as soon as the font changes. Two repairs are allowed. Use real table markup, or present the information linearly, which for a short two-column list is often the better answer and is rarely offered.
How we find it in an audit
Look for anything that reads as a table, then check whether the alignment comes from spaces. That is the published test and it needs no software at all. We read it aloud as well, because the interleaving is more persuasive heard than described. Automated tools can flag blocks with repeated space runs and column-like alignment, which narrows things down and cannot tell a table from a poem.
How affected users experience it
Real table markup gives a reader commands. Move right one cell. Move down one column. Ask what column this is, ask what row. A table made of spaces gives them a paragraph instead. "Item Qty Price Widget 2 10.00 Gadget 1 24.50" is what arrives, and the reader has to hold the header row in their head and count positions to learn that 24.50 belongs to Gadget. Three columns is possible with effort. Seven is not.
Passes vs. fails
Passes
<table>
<tr><th scope="col">Item</th><th scope="col">Qty</th><th scope="col">Price</th></tr>
<tr><td>Widget</td><td>2</td><td>10.00</td></tr>
<tr><td>Gadget</td><td>1</td><td>24.50</td></tr>
</table>Fails
Item Qty Price
Widget 2 10.00
Gadget 1 24.50How this gets tested
The W3C publishes test rules that define what a checker looks for here.
- ARIA attribute is defined in WAI-ARIAA tool can check this
- ARIA state or property has valid valueA tool can check this
- Element with role attribute has required states and propertiesA tool can check this
- Form field has non-empty accessible nameA tool can check this
- Headers attribute specified on a cell refers to cells in the same table elementA tool can check this
- Role attribute has valid valueA tool can check this
- ARIA global properties not used where prohibitedA tool can check this
- ARIA required context roleA tool can check this
- ARIA required owned elementsA tool can check this
- ARIA state or property is permittedA tool can check this
- Table header cell has assigned cellsA tool can check this
The other techniques filed under this rule
52 guides on this site are filed under 1.3.1 Info and Relationships. W3C documents this one as a failure of that rule, so it describes a way the rule gets broken rather than a way to pass it.
- ARIA11sufficientAdd landmarks so users can skip around
- ARIA12sufficientUse role=heading when h1-h6 is impossible
- ARIA13sufficientName repeated landmarks so they are distinguishable
- ARIA16sufficientName controls from visible text with aria-labelledby
- ARIA17sufficientGroup related form fields with ARIA roles
- ARIA20sufficientMark leftover page areas with role=region
This guide is our interpretation of W3C technique F34: Failure of Success Criterion 1.3.1 and 1.3.2 due to using white space characters to format tables in plain text content. W3C publishes its techniques as guidance rather than as the standard, and says so on every one of them. The success criterion is what conformance is measured against, and a technique is one documented way to meet it.