A long time ago (2008) I wrote an article: Screen Readers lack emphasis. At the time, 15 years ago, the screen readers tested did not signify the semantics of text level elements and did not signify, by default, font styles associated with such elements.
Notes:
I am not suggesting either behaviour is required or desirable. In 2008 role semantics did not exist for any of these elements. Most have recently been defined in ARIA 1.2.
Now, how do screen readers support such semantics?
Updated: 7th September 2023 with correct information about JAWS (lack of support) for role=insertion
and role=deletion
.
Updated: 11th August 2023 with information about the <s>
element.
Using the default settings:
element | JAWS | NVDA | Narrator | VO macOS | VO iOS |
---|---|---|---|---|---|
strong | no indication | no indication | no indication | no indication | no indication |
role=strong | no indication | no indication | no indication | no indication | no indication |
b | no indication | no indication | no indication | no indication | no indication |
em | no indication | no indication | no indication | no indication | no indication |
role=emphasis | no indication | no indication | no indication | no indication | no indication |
i | no indication | no indication | no indication | no indication | no indication |
del |
voice change deletion/end deletion |
deleted | no indication | no indication | deletion |
s |
no indication |
deleted | no indication | no indication | no indication |
role=deletion |
no indication |
deleted | no indication | no indication | deletion |
ins |
voice change insertion/end insertion |
inserted | no indication | no indication | insertion |
role=insertion |
no indication |
inserted | no indication | no indication | insertion |
mark |
voice change mark/end mark |
highlighted | no indication | no indication | no indication |
role=mark |
voice change mark/end mark |
highlighted | no indication | no indication | no indication |
Notes:
- None of the Screen Readers tested convey
strong
orem
semantics to users. NVDA did for a while but “Having emphasis reported by default has been extremely unpopular with users and resulted in a lot of complaints about NVDA 2015.4. The unfortunate reality is that emphasis is very much over-used in the wild.” source: Comment on GitHub by James Teh - JAWS and NVDA convey
ins
,del
andmark
semantics. There is no reliance on the visual style. - NVDA supports
role=insertion
androle=deletion
JAWS does not. - VoiceOver on iOS (Not on macOS) conveys
ins
anddel
. There is no reliance on the visual style. - Narrator does not convey any HTML semantics.
Test file: text level semantics – no styles
See the Pen text level semantics – no styles by steve faulkner (@stevef) on CodePen.
What are the semantics exposed in the Browser Accessibility Tree?
element |
Chrome Exposed mapping iA2 |
Firefox Exposed mapping iA2 |
Edge Exposed mapping UIA |
Safari Exposed mapping AXAPI |
---|---|---|---|---|
strong | role: text | role: text | role: text | role: AXStaticText |
role=strong |
role: text xml-roles: strong |
role: text xml-roles: strong |
role: text LocalizedControlType: strong |
role: AXGroup subrole: AXStrongStyleGroup |
b | role: text | role: text | role: text | role: AXStaticText |
em | role: text | role: text | role: text | role: AXStaticText |
role=emphasis |
role: text xml-roles: emphasis |
role: text xml-roles: emphasis |
role: text LocalizedControlType: emphasis |
role: AXGroup subrole: AXEmphasisStyleGroup |
i | role: text | role: text | role: text | role: AXStaticText |
del | role: “deletion” | role: “deletion” | role: text |
role: AXGroup subrole: AXDeleteStyleGroup |
s | role: “deletion” | role: “deletion” | role: text |
role: AXGroup subrole: AXDeleteStyleGroup |
role=deletion | role: “content deletion” | role: “content deletion” | LocalizedControlType: deletion |
role: AXGroup subrole: AXDeleteStyleGroup |
ins | role: “content insertion” | role: “content insertion” | role: text |
role: AXGroup subrole: AXInsertStyleGroup |
role=insertion | role: “content insertion” | role: “content insertion” | LocalizedControlType: insertion |
role: AXGroup subrole: AXInsertStyleGroup |
mark | role: mark |
role: mark xml-roles: mark |
role: text |
role: AXGroup <description> (Highlighted) |
role=mark |
role: mark xml-roles: mark |
role: mark xml-roles: mark |
role: text LocalizedControlType: highlighted |
role: AXGroup <description> (Highlighted) |
Notes:
- No browsers expose
strong
orem
element role semantics in the accessibility tree. - All browsers expose semantics for explicitly defined roles, only some for their implicit counterparts. Though this does not mean that SRs convey these semantics to users.
- The term
xml-roles
is used as a property name for roles when exposed as an iA2 object attribute property, it’s an echo of ARIA long past, when roles had a namespace prefix. It is now merely a naming convention, nothing more. - How semantics are exposed in browsers differs across accessibility APIs. For the
mark
role/element in AXAPI the description is an accessibility wrapper for the text rather than being a property (role
/subrole
) of the containingAXGroup
. This is not displayed in the in-browser accessibility panel of the developer tools. To check for its presence you need to use the macOS X Accessibility Inspector
- Refer to HTML Accessibility API Mappings 1.0 and Core Accessibility API Mappings 1.2 for expected API browser implementation details
Screen Readers and text formatting
With style reporting enabled (if available):
element | JAWS | NVDA | Narrator | VO Mac | VO iOS |
---|---|---|---|---|---|
strong | bold | bold | bold | bold | no indication |
b | bold | bold | bold | bold | no indication |
em | italic | italic | italic | italic | no indication |
i | italic | italic | italic | italic | no indication |
del |
voice change deletion/end deletion not strikethrough visual style |
deleted strikethrough |
strikethrough | strikethrough | role: deletion not visual style |
ins |
voice change insertion/end insertion underlined |
inserted underlined |
underlined | underlined | role: insertion not visual style |
mark |
voice change mark/end mark yellow background |
highlighted bright yellow background |
highlighted yellow background |
black on yellow | no indication |
Notes:
- Of the screen readers (SRs) tested, all have some form of support for conveying text formatting styles such as bold, italics except VoiceOver on iOS.
- All are off by default, but can be enabled though user settings.
- The level of control over what is conveyed to users varies widely across SRs.
- The most complete style announcements are provided by JAWS, NVDA and Narrator.
- The most configurable is JAWS via speech and sound schemes.
- JAWS does not announce/indicate
strikethroughstyle. (It does in a Word document).
How to enable reporting of document style:
- Narrator- text details
- NVDA – document formatting
- JAWS – Speech and Sounds Schemes
- VoiceOver – text attribute changes
test file: text level semantics – default browser styles
See the Pen text level semantics – default browser styles by steve faulkner (@stevef) on CodePen.
Discussion
Since my last look at this 15 years ago
- Exposure of semantics for
role=strong
,role=emphasis
,ins
,del
andmark
has been implemented in all modern browsers. - The Windows Screen readers; JAWS and NVDA provide good support for conveying
ins
,del
andmark
semantics using the information providing in the browser accessibility tree. role=strong
androle=emphasis
semantics although exposed by browsers are not supported by any SR- Visual CSS styles of bold and italic are well supported across all SRs (on desktop) and will be identified to users when the appropriate setting are enabled.
WCAG SC 1.3.1:Info and Relationships is often cited as a reason why strong
and em
must be used and Technique H49:Using semantic markup to mark emphasized or special text provides examples of “Using the em
and strong
elements to emphasize text” In practice their use does nothing for screen reader users at least, nothing that the i
and b
elements don’t provide (with their default styles).
Simply put the strong
and em
are not accessibility supported and therefore should not be a factor in accessing conformance with SC 1.3.1:Info and Relationships. Visually identifying emphasised and important text via CSS styles is an accessibility supported method and will be conveyed to SR users when they have the required settings enabled. This can be achieved by style declarations alone, it does not require the use of elements with particular semantics. By all means encourage the appropriate use of em
and strong
elements, but don’t require it.
With thanks to Ian Lloyd and Jonny James for providing macOS testing.
Comments
Thank you for this! I was recently looking for information about this and didn’t see anything recent. Thank you also for the links to the instructions for adjusting the relevant settings for each screen reader.