Data table with TD HEADERS attribute Screen reader compatibility
Last updated: May 20, 2018
Expected Result: works in a screen reader
Actual Result: causes problems in 12 screen reader / browser combinations
WCAG Technique: H43: Using id and headers attributes to associate data cells with header cells in data tables
Code used for this test:
<table>
<tr>
<th rowspan='2' id='h'>Homework</th>
<th colspan='3' id='e'>Exams</th>
<th colspan='3' id='p'>Projects</th>
</tr>
<tr>
<th id='e1' headers='e'>1</th>
<th id='e2' headers='e'>2</th>
<th id='ef' headers='e'>Final</th>
<th id='p1' headers='p'>1</th>
<th id='p2' headers='p'>2</th>
<th id='pf' headers='p'>Final</th>
</tr>
<tr>
<td headers='h'>15%</td>
<td headers='e e1'>15%</td>
<td headers='e e2'>15%</td>
<td headers='e ef'>20%</td>
<td headers='p p1'>10%</td>
<td headers='p p2'>10%</td>
<td headers='p pf'>15%</td>
</tr>
</table>
Reliability Trend
This graph shows reliability over time for this code in NVDA, JAWS, WindowEyes and Voiceover. Other screen readers don't have enough historical data yet to plot trends.
Change History
Last updated: May 20, 2018
NVDA with IE Causes problems from NVDA 2014.1 to NVDA 2017.3
NVDA with FF Stable - OK from NVDA 2014.1 to NVDA 2017.3
JAWS with IE Better - caused problems in JAWS 14.0.9002, but now OK in JAWS 17.0.2619
JAWS with FF Better - caused problems in JAWS 14.0.9002, but now OK in JAWS 17.0.2619
VoiceOver OS X Causes problems from VoiceOver OSX 10.10 to VoiceOver OSX 10.12
VoiceOver iOS Causes problems from VoiceOver iOS 8.4 to VoiceOver iOS 10.3
WindowEyes with IE Stable - OK from WindowEyes 8.4 to WindowEyes 9.2
Screen reader | Browser | Mode | Notes | What the user hears |
---|---|---|---|---|
![]() | FF60 | Reading | Headers associated with the cell read out before column number. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Row 3, homework, column 1, fifteen percent. Exams one, column 2, fifteen percent. Exams two, column 3, fifteen percent. Exams final, column 4, twenty percent. Projects one, column 5, ten percent. Projects two, column 6, ten percent. Projects final, column 7, fifteen percent. |
![]() | IE11 | Reading | Only first row TH read, table structure incomprehensible. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Homework, row 3, homework, column 1, fifteen percent. Exams, column 2, fifteen percent. Exams, column 3, fifteen percent. Exams, column 4, twenty percent. Projects, column 5, ten percent. Projects, column 6, ten percent. Projects, column 7, fifteen percent. |
![]() | FF48 | Reading | Headers associated with the cell read out before column number. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Row 3, homework, column 1, fifteen percent. Exams one, column 2, fifteen percent. Exams two, column 3, fifteen percent. Exams final, column 4, twenty percent. Projects one, column 5, ten percent. Projects two, column 6, ten percent. Projects final, column 7, fifteen percent. |
![]() | IE11 | Reading | Only first row TH read, table structure incomprehensible. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Homework, row 3, homework, column 1, fifteen percent. Exams, column 2, fifteen percent. Exams, column 3, fifteen percent. Exams, column 4, twenty percent. Projects, column 5, ten percent. Projects, column 6, ten percent. Projects, column 7, fifteen percent. |
![]() | FF41 | Reading | Headers associated with the cell read out before column number. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Row 3, homework, column 1, fifteen percent. Exams one, column 2, fifteen percent. Exams two, column 3, fifteen percent. Exams final, column 4, twenty percent. Projects one, column 5, ten percent. Projects two, column 6, ten percent. Projects final, column 7, fifteen percent. |
![]() | IE11 | Reading | Only first row TH read, table structure incomprehensible. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Homework, row 3, homework, column 1, fifteen percent. Exams, column 2, fifteen percent. Exams, column 3, fifteen percent. Exams, column 4, twenty percent. Projects, column 5, ten percent. Projects, column 6, ten percent. Projects, column 7, fifteen percent. |
![]() | FF41 | Reading | Headers associated with the cell read out before column number. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Row 3, homework, column 1, fifteen percent. Exams one, column 2, fifteen percent. Exams two, column 3, fifteen percent. Exams final, column 4, twenty percent. Projects one, column 5, ten percent. Projects two, column 6, ten percent. Projects final, column 7, fifteen percent. |
![]() | IE11 | Reading | Only first row TH read, table structure incomprehensible. | Table with 3 rows and 7 columns, row 1 column 1, homework. Column 2, exams. Column 5, projects. Row 2, exams, column 2, one. Exams, column 3, two. Exams, column 4, final. Projects, column 5, one. Projects, column 6, two. Projects, column 7, final. Homework, row 3, homework, column 1, fifteen percent. Exams, column 2, fifteen percent. Exams, column 3, fifteen percent. Exams, column 4, twenty percent. Projects, column 5, ten percent. Projects, column 6, ten percent. Projects, column 7, fifteen percent. |
![]() | FF48 | Reading | Headers associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, exams). Projects (column 3, row 1, projects). Blank (column 1, row 2, homework, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams, two). Final (column 4, row 2, exams, final). One (column 5, row 2, projects, one). Two (column 6, row 2, projects, two). Final (column 7, row 2, projects, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | IE11 | Reading | Headers associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, exams). Projects (column 3, row 1, projects). Blank (column 1, row 2, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams, two). Final (column 4, row 2, exams, final). One (column 5, row 2, projects, one). Two (column 6, row 2, projects, two). Final (column 7, row 2, projects, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | FF41 | Reading | Headers associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, exams). Projects (column 3, row 1, projects). Blank (column 1, row 2, homework, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams, two). Final (column 4, row 2, exams, final). One (column 5, row 2, projects, one). Two (column 6, row 2, projects, two). Final (column 7, row 2, projects, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | IE11 | Reading | Headers associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, exams). Projects (column 3, row 1, projects). Blank (column 1, row 2, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams, two). Final (column 4, row 2, exams, final). One (column 5, row 2, projects, one). Two (column 6, row 2, projects, two). Final (column 7, row 2, projects, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | FF41 | Reading | Headers associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, exams). Projects (column 3, row 1, projects). Blank (column 1, row 2, homework, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams, two). Final (column 4, row 2, exams, final). One (column 5, row 2, projects, one). Two (column 6, row 2, projects, two). Final (column 7, row 2, projects, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | IE11 | Reading | Headers associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, exams). Projects (column 3, row 1, projects). Blank (column 1, row 2, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams, two). Final (column 4, row 2, exams, final). One (column 5, row 2, projects, one). Two (column 6, row 2, projects, two). Final (column 7, row 2, projects, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | FF41 | Reading | Each preceding TH in a header row read as header when Ctrl+Alt+Numpad+5 pressed in TH cell. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, homework, exams). Projects (column 3, row 1, homework exams, projects). Blank (column 1, row 2, homework, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams one, two). Final (column 4, row 2, exams one two, final). One (column 5, row 2, projects one two final, one). Two (column 6, row 2, projects one two final one, two). Final (column 7, row 2, projects one two final one two, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | IE11 | Reading | Each preceding TH in a header row read as header when Ctrl+Alt+Numpad+5 pressed in TH cell. | Table with 7 columns and 3 rows. Homework (column 1, row 1, homework). Exams (column 2, row 1, homework, exams). Projects (column 3, row 1, homework exams, projects). Blank (column 1, row 2, homework, blank). One (column 2, row 2, exams, one). Two (column 3, row 2, exams one, two). Final (column 4, row 2, exams one two, final). One (column 5, row 2, projects one two final, one). Two (column 6, row 2, projects one two final one, two). Final (column 7, row 2, projects one two final one two, final). Fifteen percent (column 1, row 3, homework, fifteen percent). Fifteen percent (column 2, row 3, exams one, fifteen percent). Fifteen percent (column 3, row 3, exams two, fifteen percent). Twenty percent (column 4, row 3, exams final, twenty percent). Ten percent (column 5, row 3, projects one, ten percent). Ten percent (column 6, row 3, projects two, ten percent). Fifteen percent (column 7, row 3, projects final, fifteen percent). |
![]() | IE11 | Reading | Correctly voices complex table headers using HEADERS attribute in reading mode. | Table, 3 rows, 7 columns, homework. Exams. Projects. Homework. Exams 1. Exams 2. Exams final. Projects 1. Projects 2. Projects final. Homework, fifteen percent. Exams 1, fifteen percent. Exams 2, fifteen percent. Exams final, twenty percent. Projects 1, ten percent. Projects 2, ten percent. Projects final, fifteen percent. |
![]() | IE11 | Reading | Association specified by HEADERS attribute is only announced when in 'attribute only' headers mode. | Table 16 start, 3 rows, 7 columns. (Table 16 on 1C 1R homework) Homework. Exams. Projects. Homework, fifteen percent. Exams one, fifteen percent. Exams two, fifteen percent. Exams final, twenty percent. Projects one, ten percent. Projects two, ten percent. Projects final, fifteen percent. |
![]() | Safari 10.1.2 | Reading | Table incomprehensible - HEADERS relationships not announced correctly. | Table, 7 columns, 3 rows. Spans 2 rows, homework, column 1 of 7. Spans 3 columns, exams, column 2 of 7. Spans 3 columns, projects, column 5 of 7. Row 2 of 3, exams, one, column 2 of 7. Two column 3 of 7. Final column 4 of 7. Projects, one, column 5 of 7. Two column 6 of 7. Final column 7 of 7. Row 3 of 3, homework, one five percent, column 1 of 7. Exams one, one five percent, column 2 of 7. Two, one five percent, column 3 of 7. Final, two zero percent, column 4 of 7. Projects one, one zero percent, column 5 of 7. Two, one zero percent, column 6 of 7. Final, one five percent, column 7 of 7. |
![]() | Safari 9.1.2 | Reading | Table incomprehensible - HEADERS relationships not announced correctly. | Table, 7 columns, 3 rows. Spans 2 rows, homework, column 1 of 7. Spans 3 columns, exams, column 2 of 7. Spans 3 columns, projects, column 5 of 7. Row 2 of 3, exams, one, column 2 of 7. Two. Final. Projects, one, column 5 of 7. Two. Final. Row 3 of 3, homework, one five percent, column 1 of 7. Exams one, one five percent, column 2 of 7. Two, one five percent, column 3 of 7. Final, two zero percent, column 4 of 7. Projects one, one zero percent, column 5 of 7. Two, one zero percent, column 6 of 7. Final, one five percent, column 7 of 7. |
![]() | Safari 9.0.1 | Reading | Table incomprehensible - HEADERS relationships not announced correctly. | Table, 7 columns, 3 rows. Spans 2 rows, homework, column 1 of 7. Spans 3 columns, exams, column 2 of 7. Spans 3 columns, projects, column 5 of 7. Row 2 of 3, exams, column 2 of 7. Two. Final. Projects, one, column 5 of 7. Two. Final. Row 3 of 3, homework, one five percent, column 1 of 7. Exams one, one five percent, column 2 of 7. Two, one five percent, column 3 of 7. Final, two zero percent, column 4 of 7. Projects one, one zero percent, column 5 of 7. Two, one zero percent, column 6 of 7. Final, one five percent, column 7 of 7. |
![]() | Safari iOS 10.3 | Reading | Table incomprehensible - HEADERS relationships not announced correctly. | Homework, spans 2 rows, row 1, column 1, table start, 3 rows, 7 columns. Exams, spans 3 columns, column 2. Projects, spans 3 columns, column 5. Exams, one, row 2, column 2. Two, column 3. Final, column 4. Projects, one, column 5. Two, column 6. Final, column 7. Fifteen percent, row 3, column 1. Exams, fifteen percent, column 2. Fifteen percent, column 3. Twenty percent, column 4. Projects, ten percent, column 5. Ten percent, column 6. Fifteen percent, column 7, table end. |
![]() | Safari iOS 9.1 | Reading | Table incomprehensible - HEADERS relationships not announced correctly. | Homework, table start. Exams. Projects. Exams, one. Exams, one, two. Exams, one, final. Projects, one. Projects, one, two. Projects, one. final. Homework, fifteen percent. Exams, fifteen percent. Exams, twenty percent. Projects, ten percent. Projects, ten percent. Projects, fifteen percent, table end. |
![]() | Safari iOS 8.4 | Reading | Table incomprehensible - HEADERS relationships not announced correctly. | Homework, table start. Exams. Projects. Exams, one. Exams, two. Exams, one, final. Projects, one, one. One, two. Projects, one. final. Homework, fifteen percent. Exams, fifteen percent. Exams, fifteen percent. Projects, ten percent. Projects, ten percent. Projects, fifteen percent, table end. |
SortSite rules: AccWcag1-5.2.1
Test notes
All tests were carried out with screen reader factory settings. JAWS in particular has a wide variety of settings controlling exactly what gets spoken.
Screen readers allow users to interact in different modes, and can produce very different results in each mode. The modes used in these tests are:
- Reading Content read using the «read next» command in a screen reader
- Tabbing Content read using the «tab» key in a screen reader
- Heading Content read using the «next heading» key in a screen reader
- Touch Content read when touching an area of screen on a mobile device
In the «What the user hears» column:
- Commas represent short pauses in screen reader voicing
- Full Stops represent places where voicing stops, and the «read next» or «tab» or «next heading» command is pressed again
- Ellipsis … represent a long pause in voicing
- (Brackets) represent voicing that requires a keystroke to hear