Skip to main content
In tritt das BFSG in Kraft - Ist Deine Website schon fit?Jetzt Website prüfen
Dieser Inhalt ist derzeit nur auf Englisch verfügbar

Audit th-has-data-cells

Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe

Impact:

Serious

WCAG-Konformität:

  • A
    WCAG 1.3.1

Issue types:

failure, needs review

Table header cell has assigned cells

This rule checks that each table header has assigned cells in a table element.

Applicability

This rule applies to any HTML element with a semantic rowheader or columnheader for which all of the following is true:

  • the element is visible; and
  • the element is included in the accessibility tree; and
  • the element has at least one ancestor in the flat tree that is a semantic table or grid; and
  • the element's closest ancestor in the flat tree that is a semantic table or grid is included in the accessibility tree.

Expectation

Each target element is assigned to at least one element with an inheriting semantic cell.

Background

The roles inheriting from cell are columnheader, gridcell, and rowheader.

Assumptions

This rule assumes that table header cells have a relationship conveyed through presentation with other cells within the same table. This excludes edge cases such as a table definition where there is only one header cell, or a table definition where there are multiple headers and no other cells. In such scenarios the rule fails, but success criterion 1.3.1 Info and Relationships could still be satisfied.

Accessibility Support

  • Table markup and header cell association is not well supported by some popular assistive technologies. Passing this rule can still cause issues for users of those assistive technologies.
  • Implementation of Presentational Roles Conflict Resolution varies from one browser or assistive technology to another. Depending on this, some elements can have one of the applicable semantic roles and fail this rule with some technology but users of other technologies would not experience any accessibility issue.

Bibliography

Test Cases

Passed

Passed Example 1

This th element has an assigned td element.

<table>
	<tr>
		<th>Time</th>
	</tr>
	<tr>
		<td>05:41</td>
	</tr>
</table>

Passed Example 2

Each of the 2 span elements with role of columnheader has assigned span elements with a role of cell.

<div role="table">
	<div role="rowgroup">
		<div role="row">
			<span role="columnheader">Month</span>
			<span role="columnheader">Top Temperature</span>
		</div>
	</div>
	<div role="rowgroup">
		<div role="row">
			<span role="cell">July</span>
			<span role="cell">40 C</span>
		</div>
		<div role="row">
			<span role="cell">August</span>
			<span role="cell">45 C</span>
		</div>
	</div>
</div>

Passed Example 3

Each of the 2 th elements has an assigned td element because this td element spans 2 columns.

<table>
	<thead>
		<tr>
			<th>Projects</th>
			<th>Exams</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td colspan="2">15%</td>
		</tr>
	</tbody>
</table>

Passed Example 4

Each of the 4 th elements has an assigned td element, within the same table element having a semantic role of grid.

<table role="grid">
	<thead>
		<tr>
			<td></td>
			<th scope="col" role="columnheader">Breakfast</th>
			<th scope="col" role="columnheader">Lunch</th>
			<th scope="col" role="columnheader">Dinner</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<th scope="row" role="rowheader">Day 1</th>
			<td>8:00</td>
			<td>13:00</td>
			<td>18:00</td>
		</tr>
	</tbody>
</table>

Passed Example 5

Each of the 2 th elements has an assigned td element because the headers attribute assigns the th with id equal to "col2" to the td element.

<table>
	<tr>
		<th id="col1">Cities</th>
		<th id="col2">Count</th>
	</tr>
	<tr>
		<td>Paris</td>
	</tr>
	<tr>
		<td headers="col2">1</td>
	</tr>
</table>

Passed Example 6

Each of the 5 th elements in this table has assigned cells, whether data or header.

<table>
	<caption>
		Opening hours
	</caption>
	<tr>
		<th>Day</th>
		<th>Morning</th>
		<th>Afternoon</th>
	</tr>
	<tr>
		<th>Mon-Fri</th>
		<td>8-12</td>
		<td>14-17</td>
	</tr>
	<tr>
		<th>Sat-Sun</th>
		<td>10-14</td>
		<td>Closed</td>
	</tr>
</table>

Failed

Failed Example 1

The th element with text "Value" does not have an assigned cell within the same table element.

<table>
	<thead>
		<tr>
			<th>Rate</th>
			<th>Value</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<td>15%</td>
		</tr>
	</tbody>
</table>

Failed Example 2

This th element with id equal to "col2" does not have an assigned cell within the same table element because the headers attribute removes the cell association from its column.

<table>
	<tr>
		<th id="col1">Country</th>
		<th id="col2">Starting with a Z</th>
	</tr>
	<tr>
		<td>Zambia</td>
		<td headers="col1">Zimbabwe</td>
	</tr>
</table>

Failed Example 3

This div with role of columnheader and text equal to "Occupant" does not have an assigned cell within the same table element.

<div role="grid">
	<div role="row">
		<div role="columnheader">Room</div>
		<div role="columnheader">Occupant</div>
	</div>
	<div role="row">
		<div role="gridcell">1A</div>
	</div>
	<div role="row">
		<div role="gridcell">2A</div>
	</div>
</div>

Inapplicable

Inapplicable Example 1

There are no elements with a semantic role of header within the table element.

<table>
	<tr>
		<td>12:00</td>
	</tr>
</table>

Inapplicable Example 2

There are no elements with a semantic role of header within the table element.

<table></table>

Inapplicable Example 3

This th element has an explicit role of cell and there are no more elements with a semantic role of header within the table element.

<table>
	<tr>
		<th role="cell">Column A</th>
	</tr>
	<tr>
		<td>Cell A</td>
	</tr>
</table>

Inapplicable Example 4

This th element is neither visible nor included in the accessibility tree and there are no more elements with a semantic role of header within the table element.

<table>
	<tr>
		<th style="display: none;">Organization</th>
	</tr>
	<tr>
		<td>W3C</td>
	</tr>
</table>

Inapplicable Example 5

This th element is not included in the accessibility tree and there are no more elements with a semantic role of header within the table element.

<table>
	<tr>
		<th aria-hidden="true">Organization</th>
	</tr>
	<tr>
		<td>W3C</td>
	</tr>
</table>

Inapplicable Example 6

This th element is not a descendant in the flat tree of a semantic table or grid.

<div>
	<tr>
		<th>Column A</th>
	</tr>
</div>

Inapplicable Example 7

This th element is part of a table which is not included in the accessibility tree.

<table role="presentation">
	<tr>
		<th>Time</th>
	</tr>
	<tr>
		<td>12:00</td>
	</tr>
</table>

Autoren: Audrey Maniez, Helen Burge, Jey Nandakumar

Finanzierung: WAI-Tools