Data table with TD HEADERS attribute Screen reader compatibility

Last updated: September 5, 2016

Expected Result: works in a screen reader

Actual Result: causes problems in 9 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>
    

Change History

Last updated: September 5, 2016

Screen readerBrowserModeNotesWhat the user hears
OK NVDA 2016.2FF48 ReadingHeaders associated with the cell read out before column number. Speak 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.
Fail NVDA 2016.2IE11 ReadingOnly first row TH read, table structure incomprehensible. Speak 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.
OK NVDA 2015.2FF41 ReadingHeaders associated with the cell read out before column number. Speak 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.
Fail NVDA 2015.2IE11 ReadingOnly first row TH read, table structure incomprehensible. Speak 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.
OK NVDA 2014.1FF41 ReadingHeaders associated with the cell read out before column number. Speak 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.
Fail NVDA 2014.1IE11 ReadingOnly first row TH read, table structure incomprehensible. Speak 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.
OK JAWS 17.0.2619FF48 ReadingHeaders associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. Speak 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).
OK JAWS 17.0.2619IE11 ReadingHeaders associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. Speak 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).
OK JAWS 16.0.4350FF41 ReadingHeaders associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. Speak 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).
OK JAWS 16.0.4350IE11 ReadingHeaders associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. Speak 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).
OK JAWS 15.0.9023FF41 ReadingHeaders associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. Speak 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).
OK JAWS 15.0.9023IE11 ReadingHeaders associated with the cell read out when Ctrl+Alt+Numpad+5 pressed. Speak 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).
Fail JAWS 14.0.9002FF41 ReadingEach preceding TH in a header row read as header when Ctrl+Alt+Numpad+5 pressed in TH cell. Speak 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).
Fail JAWS 14.0.9002IE11 ReadingEach preceding TH in a header row read as header when Ctrl+Alt+Numpad+5 pressed in TH cell. Speak 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).
OK WindowEyes 9.2IE11 ReadingCorrectly voices complex table headers using HEADERS attribute in reading mode. Speak 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.
OK WindowEyes 8.4IE11 ReadingAssociation specified by HEADERS attribute is only announced when in 'attribute only' headers mode. Speak 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.
Fail VoiceOver OSX 10.11Safari 9.1.2 ReadingTable incomprehensible - HEADERS relationships not announced correctly. Speak 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.
Fail VoiceOver OSX 10.10Safari 9.0.1 ReadingTable incomprehensible - HEADERS relationships not announced correctly. Speak 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.
Fail VoiceOver iOS 9.1Safari iOS 9.1 ReadingTable incomprehensible - HEADERS relationships not announced correctly. Speak 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.
Fail VoiceOver iOS 8.4Safari iOS 8.4 ReadingTable incomprehensible - HEADERS relationships not announced correctly. Speak 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

The threshold for inclusion in these results is 5% usage in the most recent WebAIM screen reader survey. Chrome and Android still fall below the 5% threshold.

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:

In the «What the user hears» column: