VoiceOver on Mac HTML Support

A Work in progress: Last updated 11 September 2025.

Editors: Catriona Morrison, Steve Faulkner

GitHub Repo: screen-reader-HTML-support

Found a bug? Please report it.

How HTML elements are supported by screen readers

Typical support patterns of HTML elements by screen readers:

Note: The combination of patterns supported varies from element to element and support for a particular element varies between screen reader software.

Support legend

VoiceOver on Mac (2024) HTML Support - Sequoia 15.5 and tested on Safari Version 18.5 and Chrome Version 139.0.7258.66 (and double checked some on Firefox 142.0.1)
Element Test Case Represents Aural UI Interaction Supported Notes
a a with href test Hyperlink with an href Announces link text + "link"
  • Control + Option + Right/Left arrows to navigate, Control + Option + Space to activate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Links menu to see list of links
  • Control + Option + Command + L to navigate to next link
  • Tab / Shift + Tab to navigate to next focusable item (button / link)

VoiceOver recognizes visited/unvisited state of links.

a without href a with no href test An anchor Announces as plain text No special commands Treated as regular text without any link functionality.
abbr abbr test An abbreviation Element content; announces title as "group" if present before element content

No special commands

Expands abbreviation if title attribute is present, announces as "group".

address address test Contact information Reads content as plain text No special commands No additional semantics conveyed
area area test Interactive area within an image map Announces alt text if present + "image map" Control + Option + Right/Left arrow to navigate, focusable via VO navigation Requires alt attribute for accessibility.
aria-level h7-h10 (role="heading"+aria-level=7-10) ? ?

?
article article test Self-contained syndicatable or reusable composition Announces as "article" Control + Option + Right/Left arrow to navigate, focusable via VO navigation Recognizes the start and end of articles.
aside aside test Sidebar for tangentially related content Announces "complementary"
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Landmarks for a list of landmarks
Recognized as complementary region.
audio audio test Audio content with controls
  • Announces as "Audio Controls, group" if the controls attribute is present
  • Announced as as label text + "audio" if an aria-label is present
  • Control + Option + Right/Left arrow to navigate, Control + Option + Space to activate
Accessible buttons available in the player. Announcements are inconsistent across browsers.
b b test Text bolded for utilitarian purposes Reads content as normal text No special commands No specific emphasis expected.
base No test Base URL for relative links No aural interaction Not interactive No UI
bdi bdi test Isolates a span of text Reads content as normal text No special commands No aural impact; structure-only element.
bdo bdo test Overrides the current text direction Reads content as normal text No special commands No special semantics conveyed. Reads text correctly regardless of direction.
blockquote blockquote test Quoted block content Reads content as normal text No special commands No additional semantics conveyed.
body body test Document body Reads content No special commands No unique aural feedback; body is implicit.
br br test Line break, e.g. in poem or postal address No aural interaction No special commands No additional semantics conveyed.Treated as one new line, regardless of number of line break elements
button button test Button control Announces as label + "button"
  • Control + Option + Right/Left arrow to navigate, Control + Option + Space to activate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu to see list of buttons
  • Control + Option + Command + J to navigate to next form control
  • Tab / Shift + Tab to navigate to next focusable item (button / link)
Recognizes the button label and, if provided, state (pressed/unpressed) when button has aria-pressed attribute.
canvas canvas test Scriptable bitmap canvas Announces as "image" if aria-label is present or as text if fallback content is provided. Otherwise, canvas is ignored Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Accessible fallback content is read if provided
  • Canvas not identified without explicit role
caption caption test Title for a table
  • Announces caption when table is navigated to and focused with VO. Individual role is not announced
  • Announces "[caption content], table, X rows, Y columns"
  • Control + Option + Right/Left arrow to navigate, table element focusable with VO
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Tables menu to see list of tables named by the caption element
  • Control + Option + Shift + Down Arrow to enter table, Control + Option + Arrow Keys to navigate between table cells
  • Control + Option + Command + T to navigate to next table
The caption linked to the table it describes
cite cite test Reference to a creative work Reads content as normal text No special commands

No specific aural emphasis.

code code test Inline code or programming syntax Element content No special commands No additional semantics conveyed; read as normal text.
col No test Defines column properties No aural indication Not directly interactive Impact conveyed through table structure only.
colgroup colgroup test Groups multiple columns in a table No aural indication Not directly interactive Structure-enhancing, with no direct aural output.
data data test Data and its human-readable equivalent Element content No special commandss Treated as regular text
datalist datalist test Provides options for an input field Announces as "list box pop-up" on Safari or "list box pop-up, combobox" on Chrome
  • Control + Option + Space to open combobox suggestions + Up/Down Arrows to navigate
Provides suggestion list as the user types.
dd dd test Content of a term's description Element content and number of list item within dl list Control + Option + Right/Left arrow to navigate, focusable via VO navigation Linked with its associated dt, which is announced prior to the dd suffixed with "term"
del del test Marked as deleted Announces "deletion" before deleted text when included as part of a tag with plain text, otherwise no aural indication No special commands Support is inconsistent across browsers and "deletion" is only ever announced when part of a tag with plain text
details details test Expandable/collapsible content Announces summary content as disclosure label + "summary" in Safari or "group" on additional browsers
  • Control + Option + Right/Left arrow to navigate, Control + Option + Space to activate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu to see list of details elements labelled by summary content
  • Control + Option + Command + J to navigate to next form control
  • Tab / Shift + Tab to navigate to next focusable item (form control / link)
Recognizes expanded/collapsed state.
dfn dfn test Indicates a defining instance of a term Element content No special commands No additional semantics conveyed
dialog dialog test Modal dialog
  • On button that invokes a dialog: announces as label + "button", or "dialog pop-up, button" if element has an aria-haspopup="dialog" attribute
  • On dialog: announces "dialog" on Chrome or "web dialog" on Safari, followed by the auto focused control on dialog
Focus moved to dialog when opened Recognizes and traps focus within modal dialog
div div test Generic block container Element content No special commands No semantics conveyed unless ARIA roles are provided
dl dl test List of term-definition pairs Announces as "description list" in Safari or "definition list" in Chrome, "with X items"
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
Identifies number of items within the dl list
dt dt test Term in a definition list
  • Element content suffixed with "term" along with list item number in dl list
  • Additionally, in Chrome, the current dt list item number out of the overall number of dt elements is also announced
Part of list navigation Associated with the following dd
em em test Stress emphasis Element content No special commands No semantics conveyed. Refer to: Screen Readers support for text level HTML semantics
embed embed test Plugins Announces as "frame"
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Control + Option + Command + F to navigate to next frame
  • Depending on embedded object, Control + Option + Down arrow to enter embed
  • Embedded objects are not announced in Firefox, announced as "frame" in other browsers
  • Additionally, in Safari, the number of frame elements was announced in addition to "frame", starting from "frame 0"
fieldset fieldset test Group of form controls Announced legend content + "group"
  • Control + Option + Right/Left arrow to navigate to fieldset and individual form controls
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu for the individual form controls within the fieldset element
Only when fieldset has an accessible name via legend or other method
figcaption figcaption test Caption for figure Element content No special commands Announces when associated with a figure.
figure figure test Figure with optional caption
  • VoiceOver announces the content of the figure element based on what's inside it. For example, if the figure element wraps around an image, VoiceOver will read the figure element as "image" along with its accessible name, typically provided via the alt attribute
  • If the figure element is labelled by an aria-label or aria-labelledby then it announces as label content + "figure"
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Control + Option + Command + G to navigate to next graphic
  • "Figure" is not announced if the element does not have an accessible name or contain a <figcaption> element
  • If the figure element has an accessible name and wraps an image with an accessible name, it will recognise the start and end of the figure
footer footer test Footer for a page or section Announces as "content information"
  • Control + Option + Right/Left arrow to navigate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Landmarks for a list of landmarks
  • Identified as a landmark region
  • The <footer> element is not exposed if used in an <article> or <section> element
form form test User-submittable form
  • Announces as "form" if aria-label is present, otherwise not announced
  • When form is unlabelled, only the first field and element content are announced
  • Control + Option + Right/Left arrow to navigate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu to see list of individual form controls within a form
  • Tab / Shift + Tab to navigate to next focusable item (input / button)
No semantics conveyed
h1 - h6 h1 - h6 test Section heading Announced as heading content + "heading, level X" (1 to 6) Control + Option + Command + H to navigate to next heading Identifies heading level and text
head No test Container for document metadata None expected No special commands No UI
header header test Introductory or navigational aids for a page or section Announces as "banner"
  • Control + Option + Right/Left arrow to navigate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Landmarks for a list of landmarks
  • Identified as a landmark region
  • The <header> element is not exposed if used in an <article> or <section> element
hr hr test Thematic break
  • Announced as "horizontal separator" in Safari
  • Announced as "horizontal splitter" in Chrome
No special commands Properly indicates a thematic break
html No test Root element None expected No special commands No semantics expected.
i i test Alternate voice Element content No special commands No semantics conveyed.
iframe Nested browsing context
  • Announces as "frame" + the frame number
  • Announces as title + "frame" if a title attribute is present
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Control + Option + Command + F to navigate to next frame
  • Depending on frame, Control + Option + Down arrow to enter frame object
Recognizes frame title when present
img img test Image
  • Announced as image alt text + "image"
  • If no alt attribute is present, announces as file src name + "image"
  • If the image is decorative and has an empty alt, it's ignored by VoiceOver
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Control + Option + Command + G to navigate to next graphic
Reads alt attribute content if present.
input [button] input [button] test Button control Announces label, if present, + "button" Control + Option + Space to activate Recognizes button type and label
input [checkbox] input [checkbox] test Checkbox control Announces as "unticked/ticked" + "tickbox" Control + Option + Space to check/uncheck Identifies the label and state
input [color] input [color] test Colour picker control Announces as currently selected colour + "color well" Control + Option + Space to open colour picker Allows selection of colours from the palette
input [date] input [date] test date (day/month year) picker control Announces as "current date/selected date" + "date area" Control + Option + Shift + Down Arrow to edit date area, + Right/Left Arrows to navigate between date fields and Up/Down arrows to adjust stepper
input [email] input [email] test Text control for inputting email address Announces "edit text, email field" Control + Option + Right/Left arrow to navigate, focusable via VO navigation Treated as a regular text field
input [file] input [file] test File chooser control Announces as "No file selected/selected file name" + label, if present + "file upload button" Control + Option + Space to open file selection control
  • Allows file browsing and selection
  • Safari can inconsistently still announce "No file selection" after a file has been selected
input [hidden] No test hidden form control None expected No special commands Used for form data; ignored by VoiceOver
input [image] input [image] test Button control
  • Announced as "Submit button"
  • If alt text is present, announced as alt text content + "button"
Control + Option + Space to activate In Chrome, announces "edit text" when input is focused
input [number] input [number] test Numeric entry Announces as "incremental edit text number field"
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Up/Down Arrow keys to increase/decrease stepper value
Editable text field when focused with VO or the incremental stepper can be interacted with by use of Up/Down arrow keys
input [password] input [password] test Text control for inputting a password Announces as label, if present, + "secure edit text" Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Characters are masked as entered to conceal secure information
  • Characters and not announced by VO when entered, instead a noise indicates this is secure information
input [radio] input [radio], test Single choice selected from a set of options Announces as "selected/unselected, radio button" + position of radio button out of total number in radio group, for example (1 of 3) Control + Option + Space to select radio button Recognizes position within radio group
input [range] input [range] test Range input using a slider Announces as current value + "slider"
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • Right/Left Arrows to adjust value

Allows setting a value within a defined range. Slider value announced as it changes.

input [reset] input [reset] test Button control for resetting a form Announces "reset, button" or value content + "button" if value attribute is set Control + Option + Space to activate Resets all form inputs to their default values
input [search] input [search] test Text control for inputting search terms Announces as "search text field" Control + Option + Right/Left arrow to navigate, focusable via VO navigation No special commands
input [submit] input [submit] test Button control for submitting a form Announces "submit, button" or value content + "button" if value attribute is set Control + Option + Space to activate Submits the form data to the server
input [tel] input [tel] test Text box control for inputting a phone number Announces as "telephone number field" Control + Option + Right/Left arrow to navigate, focusable via VO navigation Announces "edit text" when input is focused
input [text] input [text] test Single-line text entry control
  • Announces as "edit text, blank" when there is no associated label
  • If associated label is present, announces as label text + "edit text"
Control + Option + Right/Left arrow to navigate, focusable via VO navigation Announces "edit text" when input is focused
input [time] input [time] test Control for setting a specific time. Announces current time value + "time area" Control + Option + Shift + Down Arrow to edit time values, Up/Down Arrow keys to increase/decrease stepper value/td> Provides an hour/minute input interface.
input [url] input [url] test Text control for inputting a URL Announces as "URL field" Control + Option + Right/Left arrow to navigate, focusable via VO navigation Announces "edit text" when input is focused
ins ins test An addition to the document Announces "insertion" before inserted text when included as part of a tag with plain text, otherwise no aural indication No special commands Support was inconsistent across browsers and "insertion" is only ever announced when part of a tag with plain text
kbd kbd test Represents user input Reads content as plain text No special commands No semantics conveyed
label label test Caption for a form control Label content announced when the corresponding form control has focus
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu to see list of individual form controls named by associated label content
No semantics beyond association with input conveyed
legend legend test Caption for fieldset Legend content is announced as the group label for a group of related controls when one of the controls is first focused in the group. No special commands Serves as the group label for a group of form controls. Refer to the fieldset element
li List item
  • If unordered: "bullet" + list position number out of total number of list entries
  • If ordered: announces list item + list position number out of total number of list entries
Control + Option + Right Arrow to navigate Announces total item count and position of list items within list
link No test Link metadata None expected No special commands No UI
main main test Main content of a document Announces "main"
  • Control + Option + Right/Left arrow to navigate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Landmarks for a list of landmarks
Identified as a main landmark region
map map test Image map None expected No special commands No UI
mark mark test Highlight Announces as "highlighted" No special commands If an aria-label is provided then VO recognises the start and end of highlighted content
meta No test Text metadata None expected No special commands No UI
meter meter test Gauge Announces as current value + fallback content/accessible name + "level indicator" No special commands
  • If fallback content is used in the <meta> element, the fallback content is announced instead of the value by VO in Safari. The fallback content is not announced using VO in Chrome.
  • If the <meta> element is labelled using the aria-labelledby attribute, the value is not announced by VO in Chrome.
nav nav test Section with navigational links Announces as "navigation"
  • Control + Option + Right/Left arrow to navigate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Landmarks for a list of landmarks
Identified as a navigation landmark
noscript No test Fallback content for script Content of <noscript> element read if JavaScript is not available/enabled No special commands Ignored when JavaScript is enabled.
object object test Image, nested browsing context, or plugin Announces as "frame"
  • Control + Option + Right/Left arrow to navigate, focusable via VO navigation
  • If object has an image type, it is recognised by VO as a graphic and can be navigated to with the standard keyboard shortcut Control + Option + Command + G
  • Control + Option + Command + F to navigate to next frame
  • Depending on embedded object, Control + Option + Down arrow to enter embed
  • Support varies depending on object type.
  • Fallback content is only announced if the source is broken, otherwise it is ignored by VO
  • Additionally, in Safari, the number of frame elements was announced in addition to "frame", starting from "frame 0"
ol ol test Ordered list Announces as "list, X items"
  • Control + Option + Right/Left Arrow to navigate
  • Control + Option + Command + X to navigate to next list element
Announces list structure and number of items
optgroup optgroup test Group of options in a list box No aural indication Control + Option + Space to expand/collapse options list box When optgroup element is labelled by an aria-label/aria-labelledby the label content is announced as "dimmed"
option option test Option in a list box or combo box control Announced as option content + checkmark if currently selected Up/Down arrow keys to navigate options Use Control + Option + Space to expand/collapse options list
output output test Calculated output value
  • Announced as the output value
  • In Safari, when the output element has an accessible name, it is announced as output value + "output"
  • In Chrome, when the output element has an accessible name, it is announced as output value + "status"
No special commands VO only recognises the element as "output/status" if the output element has an accessible name. Otherwise, the semantics are ignored and only the value is announced.
p p test Paragraph Element content Control + Option + P to read paragraph No aural semantics.
param (obsolete) No test Parameter for object None expected No special commands No UI
picture No test Container to offer alternative versions of an image for different scenarios. None expected No special commands No UI
pre pre test Block of preformatted text Element content No special commands No semantics conveyed
progress progress test Progress bar Announced as accessible name (if present) + current percentage value + "progress indicator" No special commands VO does not announce the new value of the progress bar if the value attribute is updated
q q test Quotation Element content No special commands
  • In Chrome, VO uses a different intonation when announcing content within a q element
  • Otherwise, in additional browsers, VO treats quotation content as plain text
rb No test Ruby base element Element content No special commands No semantics conveyed
rp No test Fallback parenthesis for browsers that don't support Ruby Element content No special commands No semantics conveyed
rt No test Represents an annotation Element content No special commands No semantics conveyed
rtc No test Ruby text container Element content No special commands No semantics conveyed
ruby No test Shows pronunciation Element content No special commands No semantics conveyed
s s test Inaccurate text Element content No special commands No semantics conveyed
samp samp test Computer output Element content No special commands
  • In Chrome, VO uses a different intonation when announcing content within a samp element
  • Otherwise, in additional browsers, VO treats element content as plain text
script No test Embedded script None expected No special commands No UI
section Generic document or application section Announces as "region" if section is labelled by an accessible name If labelled, treated as a landmark:
  • Control + Option + Right/Left arrow to navigate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Landmarks for a list of landmarks
No semantics conveyed unless the section has an accessible name, in which case VO treats the it as a landmark region.
select select test Combo box
  • In Safari, announced as "pop-up button"
  • In Chrome, announced as [current value] + [accessible name] (if present) + "menu pop-up collapsed/expanded, button"
  • Control + Option + Right/Left arrow to navigate, Control + Option + Space to activate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu to see list of select elements
  • Control + Option + Command + J to navigate to next form control
  • Tab / Shift + Tab to navigate to next focusable item (form controls / link)
Provides list of options
small small test Side comment Element content No special commands No semantics conveyed
source No test Media source for video or audio None expected No special commands No UI
span span test Generic phrasing container Element content No special commands No semantics conveyed
strong strong test Importance Element content No special commands
  • In Chrome, VO uses a different intonation when announcing content within a strong element
  • Otherwise, in additional browsers, VO treats content as plain text
style No test Embedded styling information None expected No special commands No UI
sub sub test Subscript Element content No special commands
  • In Chrome, VO uses a different intonation when announcing content within a strong element
  • Otherwise, in additional browsers, VO treats content as plain text
summary summary test disclosure widget control/label
  • In Safari, announced as element content + "expanded/collapsed, disclosure triangle, group" +
  • In Chrome, announced as element content + "expanded/collapsed, summary"
  • Control + Option + Right/Left arrow to navigate, Control + Option + Space to activate
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu to see list of details elements labelled by summary content
  • Control + Option + Command + J to navigate to next form control
  • Tab / Shift + Tab to navigate to next focusable item (form control / link)
Serves as a trigger for expanding/collapsing <details> section.
sup sup test Superscript Element content No special commands
  • In Chrome, VO uses a different intonation when announcing content within a strong element
  • Otherwise, in additional browsers, VO treats content as plain text
svg svg test Scalable Vector Graphics Accessible name "Graphic" if labelled
  • In Safari, announced as title (if present) + "group" (if no role) or "image" (if role="img" or role="graphics-symbol")
  • In Chrome or Firefox, announced as title (if present) + "image"
  • Control + Option + Right/Left arrow to navigate, focusable with VO
  • In Chrome or Firefox: svg elements are recognised by VO as graphics and can be navigated to with the standard keyboard shortcut Control + Option + Command + G
In Safari, the standard keyboard shortcut Control + Option + Command + G navigates to individual polygon elements within the <svg>
table Data table Announces "[caption content], table, X rows, Y columns"
  • Control + Option + Right/Left arrow to navigate, table element focusable with VO
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Tables menu to see list of tables named by the caption element
  • Control + Option + Shift + Down Arrow to enter table, Control + Option + Arrow Keys to navigate between table cells
  • Control + Option + Command + T to navigate to next table
  • Recognizes row/column headers and cell content
  • Control + Option + R to read all cell content in current row
  • Control + Option + R + C to read all cell content in current column
tbody tbody test Group of rows in a data table Element content No special commands No semantics conveyed
td td test Data cell in a data table Announces Cell content
  • Control + Option + Shift + Down Arrow to enter table
  • Control + Option + Arrow Keys to navigate between table cells
Announces corresponding header if programmatically associated.
template No test Template None expected No special commands No UI
textarea textarea test Multiline text field Announced as accessible name (if present) + "edit text", followed by the value if there is any text in the edit field
  • Control + Option + Right/Left arrow to navigate, focusable with VO navigation
  • Control + Option + U to open rotor, Right/Left arrow to navigate to Form Controls menu to see list of buttons
  • Control + Option + Command + J to navigate to next form control
  • Tab / Shift + Tab to navigate to next focusable item (button / link)
Announces "edit text" when input is focused
tfoot tfoot test Group of footer rows in a data table Element content No special commands No semantics conveyed
th th test Header cell in a data table Element content No special command. Reachable using standard table cell reading keystrokes. No semantics conveyed
thead thead test Group of header rows in a data table Element content No special commands No semantics conveyed
time time test Machine-readable equivalent of date- or time-related data Announced as element content, or in Safari, accessible name + element content + "group", if element has an accessible name through an aria-label/aria-labelledby attribute No special commands In Safari, content in time element is repeated twice
title No test Document title Element content
  • Control + Option + Shift + I announces page summary content, including title
  • Announces title content when navigating through browser tab bar
No semantics conveyed
tr tr test Data table row Element content Control + Option + R to read all cell content in current row No semantics conveyed
track track test Timed text track Caption display control No special commands No semantics conveyed
u u test Underlined text Element content No special commands No semantics conveyed
ul ul test Unordered List Announced as "list, X items
  • Control + Option + Right/Left Arrow to navigate
  • Control + Option + Command + X to navigate to next list element
Announces list structure and number of items
var var test Represents a variable Announces as element content or accessible name + element content + "group", if element has an accessible name No special commands No semantics conveyed
video video test Video Player
  • Announces individual controls if unlabelled
  • If video element has an accessible name then announced as accessible name + "video player" in Safari or "group" in Chrome
No special commands The video element is ignored by VO unless an accessible name is provided
wbr No test Line breaking opportunity None expected No special commands No UI

This table details how VoiceOver interacts with HTML elements, providing full information about each element's role, aural feedback, and interaction patterns.