# Failure of Success Criterion 1.3.1 for not correctly marking up table headers

ID: F91

Technology: failures

Type: Failure

## When to Use

HTML

## Description

This failure occurs when data tables do not use header elements (`th`) or other appropriate table mark-up (the `scope` attribute, `headers` and `id` or the ARIA `columnheader` and `rowheader`) roles to make the headers programmatically determinable from within table content. Making headers programmatically determinable is especially important when data cells are only intelligible together with header information. When screen reader users navigate through the table content horizontally or vertically, the headers that change can be read out to provide the necessary context for the information in the data cells.

## Examples

### Headers not marked up appropriately

This table does not use `th` (or other appropriate header markup) for headers. Instead, it uses `td` elements for all cells. Navigating cell by cell, screen readers will often fail to read the header cells associated with content.

Example Code:

    <table>
      <tr>
        <td>Name</td>
        <td>Age</td>
        <td>Height (cm)</td>
        <td>Weight (kg)</td>
      </tr>
      <tr>
        <td>Linda</td>
        <td>33</td>
        <td>169</td>
        <td>59</td>
      </tr>
      <tr>
        <td>Jack</td>
        <td>37</td>
        <td>184</td>
        <td>74</td>
      </tr>
      <tr>
        <td>Kira</td>
        <td>8</td>
        <td>120</td>
        <td>21</td>
      </tr>
      <tr>
        <td>Daniel</td>
        <td>3</td>
        <td>79</td>
        <td>14</td>
      </tr>
    </table>

View example 1 (opens in same browser window)

## Tests

### Procedure

For all data tables, check if table headers can be correctly programmatically determined by use of one of the following mechanisms:

1. headers marked up with table header (`th`) elements
2. `scope` attributes on `th` for tables with more than a single row or column of table headers.
3. headers and data cells associated using `headers` and `id` attributes
4. headers marked up as `td` elements with the `scope` attribute
5. headers marked up with ARIA role attributes `rowheader` or `columnheader`

### Expected Results

- If all checks are false, then this failure condition applies and the content fails the Success Criterion.

## Related Techniques

- H43
- H51