Data table with TD HEADERS attribute Screen reader compatibility
Last updated: December 27, 2017
Expected Result: works in a screen reader
Actual Result: causes problems in 11 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: December 27, 2017
- NVDA with IE Causes problems from NVDA 2014.1 to NVDA 2016.2
- NVDA with FF Stable - OK from NVDA 2014.1 to NVDA 2016.2
- 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 |
---|---|---|---|---|
NVDA 2016.2 | 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. |
NVDA 2016.2 | 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. |
NVDA 2015.2 | 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. |
NVDA 2015.2 | 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. |
NVDA 2014.1 | 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. |
NVDA 2014.1 | 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. |
JAWS 17.0.2619 | 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). |
JAWS 17.0.2619 | 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). |
JAWS 16.0.4350 | 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). |
JAWS 16.0.4350 | 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). |
JAWS 15.0.9023 | 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). |
JAWS 15.0.9023 | 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). |
JAWS 14.0.9002 | 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). |
JAWS 14.0.9002 | 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). |
WindowEyes 9.2 | 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. |
WindowEyes 8.4 | 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. |
VoiceOver OSX 10.12 | 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. |
VoiceOver OSX 10.11 | 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. |
VoiceOver OSX 10.10 | 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. |
VoiceOver iOS 10.3 | 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. |
VoiceOver iOS 9.1 | 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. |
VoiceOver iOS 8.4 | 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