Perceivable · 1.3 Adaptable

Info and Relationships WCAG 1.3.1 · Level A

Structure and relationships shown visually, such as headings, lists, tables, form labels and grouped fields, must be expressed in code so assistive technology can determine them, or else be stated in the text itself.

Level
A
Since
WCAG 2.0
Principle
Perceivable
Guideline
1.3 Adaptable

Live demo

Hear the structure a screen reader finds

The same task, done two ways: switch between the version that passes and the one that fails, or put them side by side. Everything in the box is live, so try it with a keyboard, a pointer or a screen reader.

Look at the headings and fields views in each version. The failing version looks the same but has no headings, no list and fields without names.

Live example

Passes

Your basket

  • Walking boots, size 9
  • Wool socks, two pairs

Delivery details

Delivery speed

What happened

    Why it passes

    A screen reader finds two headings, a list of two items and a name for every field. The two delivery options are read as one group called Delivery speed.

    Why it fails

    It looks the same, but the headings and the list are only styled text. The fields have no names, so a screen reader announces the text boxes and radio buttons without saying what to enter or choose.

    Examples

    Code that fails, and the fix

    Five examples, each one running: the usual ways this criterion fails, and code that passes. Listen to them, measure them, or copy the code.

    01What changes 2 lines

    Fails

    Headings made from bold paragraphs

    Live preview

    HTML
    <p class="big-bold">Your statements</p><p>Download a statement for any month in the last seven years.</p><p class="big-bold">Direct debits</p><p>See and cancel the payments you have set up.</p>

    The titles only look like headings. In the code they are paragraphs, so screen reader users cannot list them or jump between sections (failure F2).

    Passes

    Real heading elements

    Live preview

    HTML
    <h2>Your statements</h2><p>Download a statement for any month in the last seven years.</p><h2>Direct debits</h2><p>See and cancel the payments you have set up.</p>

    The h2 elements expose each title as a level 2 heading, so it appears in the screen reader's list of headings (technique H42).

    02What changes 2 lines

    Fails

    Data table without header cells

    Live preview

    HTML
    <table>  <tr><td><b>Date</b></td><td><b>Description</b></td><td><b>Amount</b></td></tr>  <tr><td>Mar 3</td><td>Card payment, Green Grocers</td><td>-$24.60</td></tr>  <tr><td>Mar 5</td><td>Salary</td><td>$2,150.00</td></tr></table>

    The top row is bold but made of ordinary td cells, so a screen reader reads each amount without telling the user which column it belongs to.

    Passes

    Header cells with scope and a caption

    Live preview

    HTML
    <table>  <caption>Recent transactions</caption>  <tr><th scope="col">Date</th><th scope="col">Description</th><th scope="col">Amount</th></tr>  <tr><td>Mar 3</td><td>Card payment, Green Grocers</td><td>-$24.60</td></tr>  <tr><td>Mar 5</td><td>Salary</td><td>$2,150.00</td></tr></table>

    The th cells with scope="col" tie every data cell to its column header, and the caption names the table (techniques H51 and H63).

    Passes

    Radio buttons grouped with a legend

    Live preview

    HTML
    <fieldset>  <legend>Delivery speed</legend>  <input type="radio" id="standard" name="speed" value="standard" checked>  <label for="standard">Standard, 3 to 5 days</label>  <input type="radio" id="express" name="speed" value="express">  <label for="express">Express, next day</label></fieldset>

    Each option has its own label and the legend names the group, so screen readers announce the question together with the options (technique H71).

    Why it matters

    Who it helps

    Screen reader users rely on programmatic headings, lists, table headers and labels to understand and navigate what sighted users grasp from the visual layout.

    W3C: Understanding 1.3.1
    • Level A

      Level A is the minimum: failing it can shut some people out completely.

    • In WCAG versions

      Part of WCAG 2.0 since December 2008, and of every version after it.

      WCAG 1.0 checkpoints: 3.5, 3.6, 3.7, 5.1, 5.2, 5.4, 12.4, 13.6

    • Where it is required

      Required where the law names WCAG 2.0 or later at this level: the United States, Canada, the European Union, the United Kingdom, France, Germany, Italy, Spain, the Netherlands, Ireland, Norway, Switzerland, India, Japan, Australia, New Zealand and Israel.

    How to test

    Checking it

    A few concrete steps. Automated tools find some failures; most need a person.

    1. Check that text styled as headings, lists and tables uses real heading, list and table markup, with header cells for data tables.
    2. Confirm every form field has a programmatically associated label, and related fields such as radio buttons are grouped with a legend or equivalent.
    3. View the page with styles turned off or in a screen reader and confirm the structure still makes sense.

    Common failures

    Where it breaks

    • Headings are made from large bold paragraph text rather than real heading elements.
    • A form field's visible label is not programmatically associated with the field.
    • A data table has no header cells, so screen readers cannot relate each cell to its row and column.