Notice: This is a work in progress. Please submit feedback or suggestions.

Test: HTML td element with a row header (th[scope="row"])

Screen Reader support level: partial (59/60)

Voice Control support level: not applicable

On this page

About this test

This test verifies that the row header is announced for associated td elements when the scope="row" attribute is used.

Run this test and and submit your results

Age of results

Results in this test range from 7 months ago to 2 years ago. See detailed information about test dates and versions for more information.

Failing and partial results are between 7 months ago and 7 months ago.

Test HTML

open the test page
<!DOCTYPE html>
<html lang="en">
<head>
    <title>HTML td element with row header (custom)</title>
    <style>
        table {
            border-collapse: collapse;
        }
        th, td {
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <p>Text before the table</p>
    <table>
        <tr>
            <th scope="row">Name</th>
            <td id="target">Greg</td>
        </tr>
        <tr>
            <th scope="row">Type</th>
            <td>car</td>
        </tr>
    </table>
    <p>Text after the table</p>
</body>
</html>

Summary of Screen Reader support by expectation

* means that some support is hidden behind settings

Summary of Voice Control support by expectation

scope attribute
ExpectationDragon Naturally SpeakingVoice Access (Android)Voice Control (iOS)Voice Control (MacOS)Windows Speech Recognition
ChromeChromeSafariSafariChrome
Not applicable
table element
ExpectationDragon Naturally SpeakingVoice Access (Android)Voice Control (iOS)Voice Control (MacOS)Windows Speech Recognition
ChromeChromeSafariSafariChrome
Not applicable
td element
ExpectationDragon Naturally SpeakingVoice Access (Android)Voice Control (iOS)Voice Control (MacOS)Windows Speech Recognition
ChromeChromeSafariSafariChrome
Not applicable
th element
ExpectationDragon Naturally SpeakingVoice Access (Android)Voice Control (iOS)Voice Control (MacOS)Windows Speech Recognition
ChromeChromeSafariSafariChrome
Not applicable

* means that some support is hidden behind settings

Detailed support results by expectation

Expectation for the scope attribute: convey the header as a row header if the scope is set to "row" - applied to the th element

This expectation is applied to the th element. Expectations and results might differ when the the feature is applied to different roles.

Rationale: The user needs to be able to determine what headers a cell belongs to.

Strength of these expectations for different types of assistive technologies:

  • Screen Readers: MUST
  • Voice Control: NA

Grading method: Just one of the listed commands must pass for the expectation to pass.

This expectation is from the scope attribute feature.

ATBrowserHas SupportOutput
Dragon Naturally SpeakingChromenot applicable-
JAWSChromeyes
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: n"ame, greg, row 1"
  • Result: (pass)
    • command: Control + Alt + Numpad 5 (Read current cell)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "column 2, row 1, name, Greg"
JAWSIEyes
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, greg, row 1"
  • Result: (pass)
    • command: Control + Alt + Numpad 5 (Read current cell)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "column 2, row 1, name, Greg"
JAWSFirefoxyes
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, greg, row 1"
  • Result: (pass)
    • command: Control + Alt + Numpad 5 (Read current cell)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "column 2, row 1, name, Greg"
NarratorEdgeyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Greg, non-selected, row header Name, row 1 of 2 column 2 of 2"
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Greg, non-selected, row header Name, row 1 of 2 column 2 of 2"
  • Result: (pass)
    • command: Control + Shift + Alt + Left arrow (Read row header)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header"
NVDAChromeyes
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "name row 1 greg"
  • Result: (pass)
    • command: up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "name row 1 column 2 greg"
NVDAFirefoxyes
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "name row 1 greg"
  • Result: (pass)
    • command: up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: "name row 1 column 2 greg"
OrcaFirefoxyes
  • Result: (pass)
    • command: alt + shift + up arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Name, greg, row 1, column 2"
TalkBackChromeyes
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Type, row header, name"
Voice Access (Android)Chromenot applicable-
Voice Control (iOS)Safarinot applicable-
Voice Control (MacOS)Safarinot applicable-
VoiceOver (iOS)Safariyes
  • Result: (pass)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header, column header, table start, 2 rows, 2 columns"
  • Result: (pass)
    • command: Swipe Left (Previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: after target
    • location after command: target
    • Output: "name, row header, column header, table start, 2 rows, 2 columns"
  • Result: (pass)
    • command: three-finger tap (Read additional information about the current position)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: target
    • location after command: target
    • Output: "page 1 of 1, top of screen, row header, column header, row 1 column 1"
VoiceOver (macOS)Safariyes
  • Result: (pass)
    • command: VO + Up Arrow (Move to Previous Row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: "Row 1 of 2 Name, greg, column 2 of 2"
Windows Speech RecognitionChromenot applicable-

Extended Support for: scope attribute: convey the header as a row header if the scope is set to "row"

These are less common combinations

ATBrowserHas SupportOutput
Dragon Naturally SpeakingIEnot applicable-
Dragon Naturally SpeakingFirefoxnot applicable-
JAWSEdgeunknown-
NarratorFirefoxunknown-
NarratorChromeunknown-
NarratorIEunknown-
NVDAIEunknown-
NVDAEdgeunknown-
TalkBackFirefoxunknown-
Voice Access (Android)Firefoxnot applicable-
VoiceOver (iOS)Chromeunknown-
VoiceOver (macOS)Chromeunknown-
VoiceOver (macOS)Firefoxunknown-
OrcaChromeunknown-
Voice Control (MacOS)Chromenot applicable-
Voice Control (MacOS)Firefoxnot applicable-
Windows Speech RecognitionEdgenot applicable-
Back to top

Expectation for the table element: convey its role

Rationale: A user needs to be aware that they are navigating a table.

Strength of these expectations for different types of assistive technologies:

  • Screen Readers: MUST
  • Voice Control: NA

Examples of assistive technologies support this expectation:

  • A screen reader might announce an element as something like "<name>, <role>"
  • A screen reader might imply the role by the presence of certain context roles
  • Voice Control software might let the user say something like "click, <role>".
  • Voice Control software might let the user say something like "show numbers", and interactive roles will be flagged with numbers.

Grading method: Just one of the listed commands must pass for the expectation to pass.

This expectation is from the table element feature.

ATBrowserHas SupportOutput
Dragon Naturally SpeakingChromenot applicable-
JAWSChromeyes
  • Result: (pass)
    • command: Down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 columns and 2 rows"
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table end"
JAWSIEyes
  • Result: (pass)
    • command: Down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 columns and 2 rows"
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table end"
JAWSFirefoxyes
  • Result: (pass)
    • command: Down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 columns and 2 rows"
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table end"
NarratorEdgeyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Greg, non-selected, row header Name, row 1 of 2 column 2 of 2"
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Greg, non-selected, row header Name, row 1 of 2 column 2 of 2"
  • Result: (pass)
    • command: Control + Shift + Alt + Left arrow (Read row header)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header"
NVDAChromeyes
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 rows and 2 columns, row 1 column 1, Name"
NVDAFirefoxyes
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 rows and 2 columns, row 1 column 1, Name"
OrcaFirefoxyes
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 rows, 2 columns, name, greg"
TalkBackChromeyes
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Name, row header, row 1, in grid, 2 rows, 2 columns"
Voice Access (Android)Chromenot applicable-
Voice Control (iOS)Safarinot applicable-
Voice Control (MacOS)Safarinot applicable-
VoiceOver (iOS)Safariyes
  • Result: (pass)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header, column header, row 1, column 1, table start 2 rows, 2 columns"
  • Result: (pass)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header, column header, row 1, column 1, table start 2 rows, 2 columns"
VoiceOver (macOS)Safariyes
  • Result: (pass)
    • command: VO + Right arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table, 2 columns, 2 rows"
  • Result: (pass)
    • command: VO + Left Arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: "end of table"
Windows Speech RecognitionChromenot applicable-

Extended Support for: table element: convey its role

These are less common combinations

ATBrowserHas SupportOutput
Dragon Naturally SpeakingIEnot applicable-
Dragon Naturally SpeakingFirefoxnot applicable-
JAWSEdgeunknown-
NarratorFirefoxunknown-
NarratorChromeunknown-
NarratorIEunknown-
NVDAIEunknown-
NVDAEdgeunknown-
TalkBackFirefoxunknown-
Voice Access (Android)Firefoxnot applicable-
VoiceOver (iOS)Chromeunknown-
VoiceOver (macOS)Chromeunknown-
VoiceOver (macOS)Firefoxunknown-
OrcaChromeunknown-
Voice Control (MacOS)Chromenot applicable-
Voice Control (MacOS)Firefoxnot applicable-
Windows Speech RecognitionEdgenot applicable-
Back to top

Expectation for the table element: convey the boundaries of the table

Rationale: A user needs to know when they enter and exit an element

Strength of these expectations for different types of assistive technologies:

  • Screen Readers: MUST
  • Voice Control: NA

Examples of assistive technologies support this expectation:

  • A screen reader might announce the role of the element when entering and say something like "leaving" when exiting.
  • A screen reader might not explicitly announce entering and existing the element, but instead imply that the is in the containing object by conveying the roles of required children (options in a listbox for example).
  • A screen reader might announce position in set information such as "1 of 6".
  • A screen reader might not convey boundaries if the content fits on a single line

Grading method: All of the listed commands must pass for the expectation to pass.

This expectation is from the table element feature.

ATBrowserHas SupportOutput
Dragon Naturally SpeakingChromenot applicable-
JAWSChromeyes
  • Result: (pass)
    • command: Down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 columns and 2 rows"
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table end"
JAWSIEyes
  • Result: (pass)
    • command: Down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 columns and 2 rows"
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table end"
JAWSFirefoxyes
  • Result: (pass)
    • command: Down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 columns and 2 rows"
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table end"
NarratorEdgeyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Greg, non-selected, row header Name, row 1 of 2 column 2 of 2"
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Greg, non-selected, row header Name, row 1 of 2 column 2 of 2"
  • Result: (pass)
    • command: Down arrow (Read next item (scan mode))
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table exit, text after the table"
  • Result: (pass)
    • command: Up arrow (Read previous item (scan mode))
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table exit, text before the table"
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "no previous cell in column"
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "no previous cell in row"
NVDAChromeyes
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 rows and 2 columns, row 1 column 1, Name"
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 rows and 2 columns, row 1 column 1, Name"
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
NVDAFirefoxyes
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 rows and 2 columns, row 1 column 1, Name"
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table with 2 rows and 2 columns, row 1 column 1, Name"
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "edge of table"
OrcaFirefoxyes
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: start of target
    • Output: "table with 2 rows, 2 columns, name, greg"
  • Result: (pass)
    • command: down arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: within target
      • virtual cursor location: within target
    • location after command: after target
    • Output: "leaving table"
  • Result: (pass)
    • command: alt + shift + right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "end of row"
  • Result: (pass)
    • command: alt + shift + left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "beginning of row"
  • Result: (pass)
    • command: alt + shift + down arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "bottom of column"
  • Result: (pass)
    • command: alt + shift + up arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "top of column"
TalkBackChromeyes
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Name, row header, row 1, in grid, 2 rows, 2 columns"
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Name, row header, row 1, in grid, 2 rows, 2 columns"
Voice Access (Android)Chromenot applicable-
Voice Control (iOS)Safarinot applicable-
Voice Control (MacOS)Safarinot applicable-
VoiceOver (iOS)Safariyes
  • Result: (pass)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header, column header, row 1, column 1, table start 2 rows, 2 columns"
  • Result: (pass)
    • command: Swipe Left (Previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: after target
    • location after command: target
    • Output: "type, car, row 2, column 2, table end"
VoiceOver (macOS)Safariyes
  • Result: (pass)
    • command: VO + Right arrow (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "table, 2 columns, 2 rows"
  • Result: (pass)
    • command: VO + Left Arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: "end of table"
Windows Speech RecognitionChromenot applicable-

Extended Support for: table element: convey the boundaries of the table

These are less common combinations

ATBrowserHas SupportOutput
Dragon Naturally SpeakingIEnot applicable-
Dragon Naturally SpeakingFirefoxnot applicable-
JAWSEdgeunknown-
NarratorFirefoxunknown-
NarratorChromeunknown-
NarratorIEunknown-
NVDAIEunknown-
NVDAEdgeunknown-
TalkBackFirefoxunknown-
Voice Access (Android)Firefoxnot applicable-
VoiceOver (iOS)Chromeunknown-
VoiceOver (macOS)Chromeunknown-
VoiceOver (macOS)Firefoxunknown-
OrcaChromeunknown-
Voice Control (MacOS)Chromenot applicable-
Voice Control (MacOS)Firefoxnot applicable-
Windows Speech RecognitionEdgenot applicable-
Back to top

Expectation for the td element: convey its role

Rationale: A table can only contain cells of information, so the role is usually implied.

Strength of these expectations for different types of assistive technologies:

  • Screen Readers: MAY
  • Voice Control: NA

Examples of assistive technologies support this expectation:

  • A screen reader might announce an element as something like "<name>, <role>"
  • A screen reader might imply the role by the presence of certain context roles
  • Voice Control software might let the user say something like "click, <role>".
  • Voice Control software might let the user say something like "show numbers", and interactive roles will be flagged with numbers.

Grading method: Just one of the listed commands must pass for the expectation to pass.

This expectation is from the td element feature.

ATBrowserHas SupportOutput
Dragon Naturally SpeakingChromenot applicable-
JAWSChromeyes
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
JAWSIEyes
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
JAWSFirefoxyes
  • Result: (pass)
    • command: Up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
NarratorEdgeyes
  • Result: (pass)
    • command: Up arrow (Read previous item (scan mode))
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
NVDAChromeyes
  • Result: (pass)
    • command: up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
NVDAFirefoxyes
  • Result: (pass)
    • command: up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
OrcaFirefoxyes
  • Result: (pass)
    • command: up arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: alt + shift + right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: alt + shift + down arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
TalkBackChromeyes
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
Voice Access (Android)Chromenot applicable-
Voice Control (iOS)Safarinot applicable-
Voice Control (MacOS)Safarinot applicable-
VoiceOver (iOS)Safariyes
  • Result: (pass)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Swipe Left (Previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: after target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
VoiceOver (macOS)Safariyes
  • Result: (pass)
    • command: VO + Left Arrow (Read previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: VO + Right Arrow (Move to Next Column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: VO + Down Arrow (Move to Next Row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
Windows Speech RecognitionChromenot applicable-

Extended Support for: td element: convey its role

These are less common combinations

ATBrowserHas SupportOutput
Dragon Naturally SpeakingIEnot applicable-
Dragon Naturally SpeakingFirefoxnot applicable-
JAWSEdgeunknown-
NarratorFirefoxunknown-
NarratorChromeunknown-
NarratorIEunknown-
NVDAIEunknown-
NVDAEdgeunknown-
TalkBackFirefoxunknown-
Voice Access (Android)Firefoxnot applicable-
VoiceOver (iOS)Chromeunknown-
VoiceOver (macOS)Chromeunknown-
VoiceOver (macOS)Firefoxunknown-
OrcaChromeunknown-
Voice Control (MacOS)Chromenot applicable-
Voice Control (MacOS)Firefoxnot applicable-
Windows Speech RecognitionEdgenot applicable-
Back to top

Expectation for the td element: convey the position of the header (row/column)

Rationale: A user needs to be able to determine where they are while navigating a table.

Strength of these expectations for different types of assistive technologies:

  • Screen Readers: MUST
  • Voice Control: NA

Grading method: Just one of the listed commands must pass for the expectation to pass.

This expectation is from the td element feature.

ATBrowserHas SupportOutput
Dragon Naturally SpeakingChromenot applicable-
JAWSChromeyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
JAWSIEyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
JAWSFirefoxyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
NarratorEdgeyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
NVDAChromeyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
NVDAFirefoxyes
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
OrcaFirefoxyes
  • Result: (pass)
    • command: alt + shift + right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: alt + shift + down arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: alt + shift + left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: alt + shift + up arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
TalkBackChromeyes
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
Voice Access (Android)Chromenot applicable-
Voice Control (iOS)Safarinot applicable-
Voice Control (MacOS)Safarinot applicable-
VoiceOver (iOS)Safariyes
  • Result: (pass)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: Swipe Left (Previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: after target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
VoiceOver (macOS)Safariyes
  • Result: (pass)
    • command: VO + Right Arrow (Move to Next Column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: VO + Down Arrow (Move to Next Row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (no header semantics surfaced, which implies that this is a cell)
  • Result: (pass)
    • command: VO + Left Arrow (Move to Previous Column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: VO + Up Arrow (Move to Previous Row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
Windows Speech RecognitionChromenot applicable-

Extended Support for: td element: convey the position of the header (row/column)

These are less common combinations

ATBrowserHas SupportOutput
Dragon Naturally SpeakingIEnot applicable-
Dragon Naturally SpeakingFirefoxnot applicable-
JAWSEdgeunknown-
NarratorFirefoxunknown-
NarratorChromeunknown-
NarratorIEunknown-
NVDAIEunknown-
NVDAEdgeunknown-
TalkBackFirefoxunknown-
Voice Access (Android)Firefoxnot applicable-
VoiceOver (iOS)Chromeunknown-
VoiceOver (macOS)Chromeunknown-
VoiceOver (macOS)Firefoxunknown-
OrcaChromeunknown-
Voice Control (MacOS)Chromenot applicable-
Voice Control (MacOS)Firefoxnot applicable-
Windows Speech RecognitionEdgenot applicable-
Back to top

Expectation for the th element: convey its role

Rationale: A user needs to be able to determine what headers apply to a given cell.

Strength of these expectations for different types of assistive technologies:

  • Screen Readers: MUST
  • Voice Control: NA

Examples of assistive technologies support this expectation:

  • A screen reader might announce an element as something like "<name>, <role>"
  • A screen reader might imply the role by the presence of certain context roles
  • Voice Control software might let the user say something like "click, <role>".
  • Voice Control software might let the user say something like "show numbers", and interactive roles will be flagged with numbers.

Grading method: Just one of the listed commands must pass for the expectation to pass.

This expectation is from the th element feature.

ATBrowserHas SupportOutput
Dragon Naturally SpeakingChromenot applicable-
JAWSChromeyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
JAWSIEyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
JAWSFirefoxyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
NarratorEdgeyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
NVDAChromeyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
NVDAFirefoxyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
OrcaFirefoxyes
  • Result: (pass)
    • command: alt + shift + down arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: alt + shift + up arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: alt + shift + right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: alt + shift + left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
TalkBackChromeyes
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Name, row header"
Voice Access (Android)Chromenot applicable-
Voice Control (iOS)Safarinot applicable-
Voice Control (MacOS)Safarinot applicable-
VoiceOver (iOS)Safaripartial
  • Result: (partial)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header, column header, table start, 2 rows, 2 columns"
    • Result Notes: also conveyed, incorrectly, as a column header
  • Result: (partial)
    • command: Swipe Left (Previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: after target
    • location after command: target
    • Output: "name, row header, column header, table start, 2 rows, 2 columns"
    • Result Notes: also conveyed, incorrectly, as a column header
  • Result: (pass)
    • command: three-finger tap (Read additional information about the current position)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: target
    • location after command: target
    • Output: "page 1 of 1, top of screen, row header, column header, row 1 column 1"
VoiceOver (macOS)Safariyes
  • Result: (pass)
    • command: VO + Up Arrow (Move to Previous Row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: "Row 1 of 2 Name, greg"
Windows Speech RecognitionChromenot applicable-

Extended Support for: th element: convey its role

These are less common combinations

ATBrowserHas SupportOutput
Dragon Naturally SpeakingIEnot applicable-
Dragon Naturally SpeakingFirefoxnot applicable-
JAWSEdgeunknown-
NarratorFirefoxunknown-
NarratorChromeunknown-
NarratorIEunknown-
NVDAIEunknown-
NVDAEdgeunknown-
TalkBackFirefoxunknown-
Voice Access (Android)Firefoxnot applicable-
VoiceOver (iOS)Chromeunknown-
VoiceOver (macOS)Chromeunknown-
VoiceOver (macOS)Firefoxunknown-
OrcaChromeunknown-
Voice Control (MacOS)Chromenot applicable-
Voice Control (MacOS)Firefoxnot applicable-
Windows Speech RecognitionEdgenot applicable-
Back to top

Expectation for the th element: convey the position of the header (row/column)

Rationale: A user needs to be able to determine where they are while navigating a table.

Strength of these expectations for different types of assistive technologies:

  • Screen Readers: MUST
  • Voice Control: NA

Grading method: Just one of the listed commands must pass for the expectation to pass.

This expectation is from the th element feature.

ATBrowserHas SupportOutput
Dragon Naturally SpeakingChromenot applicable-
JAWSChromeyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
JAWSIEyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
JAWSFirefoxyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
NarratorEdgeyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
NVDAChromeyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
NVDAFirefoxyes
  • Result: (pass)
    • command: Control + Alt + up arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + down arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: Control + Alt + Left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
OrcaFirefoxyes
  • Result: (pass)
    • command: alt + shift + down arrow (Move to next row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: alt + shift + up arrow (Move to previous row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: alt + shift + right arrow (Move to next column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
  • Result: (pass)
    • command: alt + shift + left arrow (Move to previous column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (cell is announced as the header as you transition between rows)
TalkBackChromeyes
  • Result: (pass)
    • command: Swipe right (Read next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: "Name, row header"
Voice Access (Android)Chromenot applicable-
Voice Control (iOS)Safarinot applicable-
Voice Control (MacOS)Safarinot applicable-
VoiceOver (iOS)Safariyes
  • Result: (pass)
    • command: Swipe Right (Next item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: before target
    • location after command: target
    • Output: "name, row header, column header, table start, 2 rows, 2 columns"
  • Result: (pass)
    • command: Swipe Left (Previous item)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • virtual cursor location: after target
    • location after command: target
    • Output: "name, row header, column header, table start, 2 rows, 2 columns"
VoiceOver (macOS)Safariyes
  • Result: (pass)
    • command: VO + Up Arrow (Move to Previous Row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: after target
    • location after command: target
    • Output: "Row 1 of 2 Name, greg"
  • Result: (pass)
    • command: VO + Right Arrow (Move to Next Column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: VO + Left Arrow (Move to Previous Column)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
  • Result: (pass)
    • command: VO + Down Arrow (Move to Next Row)
    • before the command was executed
      • mode: auto (mode not explicitly)
      • keyboard focus location: before target
      • virtual cursor location: before target
    • location after command: target
    • Output: (position information is announced as column and rows are changed)
Windows Speech RecognitionChromenot applicable-

Extended Support for: th element: convey the position of the header (row/column)

These are less common combinations

ATBrowserHas SupportOutput
Dragon Naturally SpeakingIEnot applicable-
Dragon Naturally SpeakingFirefoxnot applicable-
JAWSEdgeunknown-
NarratorFirefoxunknown-
NarratorChromeunknown-
NarratorIEunknown-
NVDAIEunknown-
NVDAEdgeunknown-
TalkBackFirefoxunknown-
Voice Access (Android)Firefoxnot applicable-
VoiceOver (iOS)Chromeunknown-
VoiceOver (macOS)Chromeunknown-
VoiceOver (macOS)Firefoxunknown-
OrcaChromeunknown-
Voice Control (MacOS)Chromenot applicable-
Voice Control (MacOS)Firefoxnot applicable-
Windows Speech RecognitionEdgenot applicable-
Back to top

Dates and Versions of tested combinations

ATAT VersionBrowserBrowser versionOS versionDate tested
JAWS2018.1811.2Chrome7418092019-05-03
JAWS2018.1811.2IE11.13418092019-05-03
JAWS2018.1811.2Firefox6618092019-05-03
Narrator1809Edge44.1776318092019-05-03
NVDA2018.1808.10Chrome7418092019-05-03
NVDA2018.2.1Firefox61.0.118032018-07-30
Orca3.31.4Firefox69Ubuntu 19.042019-09-14
TalkBack7.3.0Chrome7672019-09-14
VoiceOver (iOS)13.3Safari13.313.32020-01-29
VoiceOver (macOS)10.15.2Safari13.0.410.15.22020-01-29

History

  • 2018-07-29 Sample data has been added. This data has not been verified.
  • 2019-05-03 Sample html was updated to better reflect a real word example, and data was updated as well.
  • 2019-09-14 Add orca and talkback results
  • 2020-01-29 Update VO results and clean up data