[Skip navigation links]
Login

HTML attributes Screen reader compatibility

Last updated: January 11, 2020

Shows how different HTML attributes behave in commonly used screen readers.

The results include two types of test:

alt

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (94% average)89% 96% 100% 94% 91% 100% 99% 89%
Should work. Works in 100% Heading is `img` with `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Works in 100% Link containing `img` with `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 26% - 50% `area` and `img` with `alt` attributesBadBetterGoodGoodBetterGoodBetterBad
Should work. Fails in 1% - 25% `area` with `alt` attribute and `img` with null `alt`BadGoodGoodGoodBetterGoodGoodGood
Should work. Fails in 1% - 25% `button` containing `img` with `alt`BetterGoodGoodBetterGoodGoodGoodGood
Should work. Fails in 1% - 25% `button` with `aria-label` containing `img` with null `alt`GoodGoodGoodBetterGoodGoodGoodGood
Should work. Works in 100% `button` with `title` containing `img` with null `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Works in 100% `img` with `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Works in 100% `img` with null `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Works in 100% `input type=image` with `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% Definition lists with images as bulletsBadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Heading is `img` `alt=filename`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Heading is `img` with `alt=""`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Heading is `img` with no `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 51% - 75% Image `map` with no `name` attributeBadBetterBadGoodBetterBadBadBad
Should fail. Fails in 76% - 100% Link containing `img` with null `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Link containing `img` without `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% Link with `aria-label` containing `img` with no `alt`GoodBetterGoodBadBetterGoodBetterGood
Should fail. Fails in 26% - 50% Link with `aria-labelledby` containing `img` with no `alt`BadBetterGoodBadBetterGoodBetterGood
Should fail. Fails in 1% - 25% Link with `title` containing `img` with no `alt`GoodBetterGoodWorseBetterGoodBetterGood
Should fail. Fails in 51% - 75% `applet` with `alt` attributeBadBetterGoodBadBetterGoodBadGood
Should fail. Fails in 76% - 100% `area` with no `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `area` with null `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `button` containing `img` with no `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `button` containing `img` with null `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% `button` with `aria-label` containing `img` with no `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 1% - 25% `button` with `title` containing `img` with no `alt`GoodGoodGoodBadGoodGoodGoodGood
Should fail. Fails in 76% - 100% `embed` with `alt` attributeBadBadBadBadBadBadBadBad
Should fail. Fails in 51% - 75% `img` with `alt` set to ASCII art smileyBadBadBadBadBadBadGoodGood
Should fail. Fails in 76% - 100% `img` with `alt` set to `src` filenameBadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `img` with null `alt `and non-null `title` attributesBadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `img` with null `alt` and non-null `aria-label` attributesBadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `img` with null `alt` and non-null `aria-labelledby` attributesBadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `img` without `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `input type=image` with no `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `input type=image` with null `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `object` with `alt` attributeBadBadBadBadBadBadBadBad

aria-describedby

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (90% average)100% 100% 100% 81% 94% 100% 79% 100%
Should work. Fails in 1% - 25% A "click here" link with `aria-describedby` attributeGoodGoodGoodBetterBetterGoodBetterGood
Should work. Fails in 1% - 25% `input type=text` with `aria-describedby` attributeGoodGoodGoodBetterBetterGoodBetterGood
Should fail. Fails in 76% - 100% `img` with `aria-describedby`BadBadBadBadBadBadGoodBad

aria-label

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (71% average)76% 72% 83% 72% 67% 89% 77% 64%
Should work. Fails in 1% - 25% Link text replaced by `aria-label` attributeBetterBetterGoodGoodBetterGoodGoodGood
Should work. Fails in 26% - 50% `applet` with `aria-label` attributeGoodBetterGoodBetterBetterGoodBadGood
Should work. Fails in 26% - 50% `area` with `aria-label` attributeBadBetterGoodBetterBetterGoodBetterBad
Should work. Fails in 76% - 100% `audio` with `aria-label` attributeBadBadBadBadBadBadBadBad
Should work. Fails in 1% - 25% `button` containing `img` with `aria-label`BetterGoodGoodBetterGoodGoodGoodGood
Should work. Fails in 1% - 25% `button` with `aria-label` containing `img` with null `alt`GoodGoodGoodBetterGoodGoodGoodGood
Should work. Fails in 51% - 75% `embed` with `aria-label` attributeGoodBetterBadBetterBadGoodBadBad
Should work. Fails in 1% - 25% `img` with `aria-label`BetterGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 1% - 25% `input type=image` with `aria-label` attributeGoodGoodGoodBetterGoodGoodGoodGood
Should work. Fails in 1% - 25% `input type=text` with `aria-label` attributeBadBetterGoodGoodGoodGoodGoodGood
Should work. Fails in 51% - 75% `object` with `aria-label` attributeGoodBadGoodBadBadGoodBadBad
Should work. Fails in 51% - 75% `video` with `aria-label` attributeGoodBadBadBadBadBadBetterBetter
Should fail. Fails in 1% - 25% Link with `aria-label` containing `img` with no `alt`GoodBetterGoodBadBetterGoodBetterGood
Should fail. Fails in 1% - 25% `button` with `aria-label` containing `img` with no `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% `img` with null `alt` and non-null `aria-label` attributesBadBadBadBadBadBadBadBad

aria-labelledby

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (61% average)39% 74% 81% 69% 54% 88% 62% 61%
Should work. Fails in 1% - 25% Link text replaced by `aria-labelledby` attributeBadBetterGoodBetterGoodGoodGoodGood
Should work. Fails in 51% - 75% `applet` with `aria-labelledby` attributeBadBetterGoodBetterBetterGoodBadGood
Should work. Fails in 51% - 75% `area` with `aria-labelledby` attributeBadBadGoodBetterBetterGoodBadBad
Should work. Fails in 76% - 100% `audio` with `aria-labelledby` attributeBadBadBadBadBadBadBadBad
Should work. Fails in 26% - 50% `button` containing `img` with `aria-labelledby`BadGoodGoodBetterBadGoodGoodGood
Should work. Fails in 76% - 100% `embed` with `aria-labelledby` attributeBadBetterBadBetterBadGoodBadBad
Should work. Fails in 1% - 25% `img` with `aria-labelledby`BadGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 1% - 25% `input type=image` with `aria-labelledby` attributeBadGoodGoodBetterGoodGoodGoodGood
Should work. Works in 100% `input type=text` with `aria-labelledby` attributeGoodGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 76% - 100% `object` with `aria-labelledby` attributeBadBadGoodBadBadGoodBadBad
Should work. Fails in 76% - 100% `video` with `aria-labelledby` attributeBadBadBadBadBadBadBetterBetter
Should fail. Fails in 26% - 50% Link with `aria-labelledby` containing `img` with no `alt`BadBetterGoodBadBetterGoodBetterGood
Should fail. Fails in 76% - 100% `img` with null `alt` and non-null `aria-labelledby` attributesBadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% `input` with `aria-labelledby` pointing to `role=presentation` elementGoodGoodGoodBetterGoodGoodGoodGood

aria-level

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (90% average)71% 100% 100% 100% 100% 100% 100% 100%
Should work. Fails in 1% - 25% ARIA `role=heading`BetterGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% Nested ARIA headingsBadBadBadBadBadBadBadBad

for

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (100% average)100% 100% 100% 100% 100% 100% 100% 100%
Should work. Works in 100% `input type=text` with `label for`GoodGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% `input type=text` with blank `label for`BadBadBadBadBadBadBadBad
Should fail. Fails in 51% - 75% `label` elements reference controls with duplicate idsBadBadBadBadBadBadBadBad

headers

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (52% average)0% 100% 100% 86% 57% 100% 0% 0%
Should work. Fails in 26% - 50% Data table with `td headers` attributeBadGoodGoodBetterBadGoodBadBad

href

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Should fail. Fails in 51% - 75% Link with `onclick` but no `href`BadBadBadBadBadBadBadBad

id

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (91% average)82% 100% 100% 97% 92% 100% 83% 71%
Should work. Fails in 26% - 50% Data table with `td headers` attributeBadGoodGoodBetterBadGoodBadBad
Should work. Works in 100% `input type=text` with `aria-labelledby` attributeGoodGoodGoodGoodGoodGoodGoodGood
Should work. Works in 100% `input type=text` with `label for`GoodGoodGoodGoodGoodGoodGoodGood
Should fail. Fails in 76% - 100% `input type=text` with blank `label for`BadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% `input` with `aria-labelledby` pointing to `role=presentation` elementGoodGoodGoodBetterGoodGoodGoodGood
Should fail. Fails in 51% - 75% `label` elements reference controls with duplicate idsBadBadBadBadBadBadBadBad

ismap

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Should fail. Fails in 76% - 100% `img` with server side image mapBadBadBadBadBadBadBadBad

lang

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (100% average)100% 100% 100% 100% 100% 100% 100% 100%
Should work. Works in 100% Page with `lang` set on the `html` and `p` elementsGoodGoodGoodGoodGoodGoodGoodGood

media

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Should fail. Fails in 76% - 100% CSS stylesheet link with `media=aural`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% CSS stylesheet link with `media=speech`BadBadBadBadBadBadBadBad

name

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (59% average)40% 53% 100% 94% 35% 100% 71% 8%
Should work. Fails in 26% - 50% `area` and `img` with `alt` attributesBadBetterGoodGoodBetterGoodBetterBad
Should work. Fails in 1% - 25% `area` with `alt` attribute and `img` with null `alt`BadGoodGoodGoodBetterGoodGoodGood
Should work. Fails in 26% - 50% `area` with `aria-label` attributeBadBetterGoodBetterBetterGoodBetterBad
Should work. Fails in 51% - 75% `area` with `aria-labelledby` attributeBadBadGoodBetterBetterGoodBadBad
Should work. Fails in 26% - 50% `area` with `title` attributeBadBadGoodGoodBadGoodBetterBad
Should fail. Fails in 51% - 75% Image `map` with no `name` attributeBadBetterBadGoodBetterBadBadBad
Should fail. Fails in 76% - 100% `area` with no `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `area` with null `alt`BadBadBadBadBadBadBadBad

role

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (76% average)63% 74% 75% 94% 94% 100% 70% 60%
Should work. Fails in 1% - 25% ARIA `role=heading`BetterGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 51% - 75% Data table with `role=columnheader` headers but no `th`BadBadBadGoodGoodGoodBadBad
Should work. Fails in 1% - 25% Data table with `role=grid`BetterGoodGoodBetterBetterGoodBetterBetter
Should work. Fails in 1% - 25% Layout table with `role=presentation`GoodGoodGoodGoodGoodGoodGoodBad
Should fail. Fails in 76% - 100% Data table with `role=note`BetterBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Data table with `role=presentation`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Nested ARIA headingsBadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% `input` with `aria-labelledby` pointing to `role=presentation` elementGoodGoodGoodBetterGoodGoodGoodGood

scope

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (45% average)0% 0% 100% 100% 100% 100% 0% 0%
Should work. Fails in 51% - 75% Data table with `th scope` on cell headersBadBadGoodGoodGoodGoodBadBad
Should fail. Fails in 51% - 75% Data table `th` cell headers with no `scope`BadBadGoodBetterBetterGoodBadBad

summary

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (79% average)100% 100% 100% 86% 71% 100% 80% 0%
Should work. Fails in 1% - 25% Data table with `summary` and `th`GoodGoodGoodBetterBetterGoodBetterBad
Should fail. Fails in 76% - 100% Data table with `summary` but no `th`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% Data table with null `summary` and no `th`BadBadBadBadBadBadBadBad

target

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Should fail. Fails in 76% - 100% Link `target` opens in new windowBadBadBadBadBadBadBadBetter

title

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (81% average)71% 75% 94% 92% 83% 94% 81% 68%
Should work. Fails in 1% - 25% A "click here" link with `title` attributeBadGoodGoodBetterBetterGoodBetterBetter
Should work. Works in 100% Link containing `img` with `title`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 76% - 100% `abbr` with `title`BadBadBadBadBadBadBadBad
Should work. Fails in 26% - 50% `area` with `title` attributeBadBadGoodGoodBadGoodBetterBad
Should work. Fails in 26% - 50% `button` containing `img` with `title` attributeBetterGoodGoodBetterGoodGoodBadBad
Should work. Works in 100% `button` with `title` containing `img` with null `alt`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 1% - 25% `iframe` with `title` attributeBadBadGoodGoodBetterGoodGoodGood
Should work. Works in 100% `img` with `title`GoodGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 1% - 25% `input type=image` with `title` attributeGoodGoodGoodGoodGoodGoodGoodGood
Should work. Fails in 1% - 25% `input type=text` with `title` attributeBadBetterGoodGoodGoodGoodGoodGood
Should fail. Fails in 1% - 25% Link with `title` containing `img` with no `alt`GoodBetterGoodWorseBetterGoodBetterGood
Should fail. Fails in 76% - 100% `acronym` with `title`BadBadBadBadBadBadBadBad
Should fail. Fails in 51% - 75% `applet` with `title` attributeBadBetterGoodBadBetterGoodBadGood
Should fail. Fails in 76% - 100% `audio` with `title` attributeBadBadBadBadBadBadBadBad
Should fail. Fails in 1% - 25% `button` with `title` containing `img` with no `alt`GoodGoodGoodBadGoodGoodGoodGood
Should fail. Fails in 76% - 100% `embed` with `title` attributeBadBetterBadBadBadGoodBadBad
Should fail. Fails in 26% - 50% `iframe` with `title` matching frame filenameBadBadBadGoodBadBadBadGood
Should fail. Fails in 1% - 25% `iframe` with blank `title`GoodBadGoodGoodBetterGoodBadGood
Should fail. Fails in 76% - 100% `img` with null `alt `and non-null `title` attributesBadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `object` with `title` attributeBadBadGoodBadBadGoodBadBad
Should fail. Fails in 51% - 75% `video` with `title` attributeGoodBadBadBadBadBadBetterBetter

usemap

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (59% average)40% 53% 100% 94% 35% 100% 71% 8%
Should work. Fails in 26% - 50% `area` and `img` with `alt` attributesBadBetterGoodGoodBetterGoodBetterBad
Should work. Fails in 1% - 25% `area` with `alt` attribute and `img` with null `alt`BadGoodGoodGoodBetterGoodGoodGood
Should work. Fails in 26% - 50% `area` with `aria-label` attributeBadBetterGoodBetterBetterGoodBetterBad
Should work. Fails in 51% - 75% `area` with `aria-labelledby` attributeBadBadGoodBetterBetterGoodBadBad
Should work. Fails in 26% - 50% `area` with `title` attributeBadBadGoodGoodBadGoodBetterBad
Should fail. Fails in 51% - 75% Image `map` with no `name` attributeBadBetterBadGoodBetterBadBadBad
Should fail. Fails in 76% - 100% `area` with no `alt`BadBadBadBadBadBadBadBad
Should fail. Fails in 76% - 100% `area` with null `alt`BadBadBadBadBadBadBadBad

xml:lang

Screen ReaderNVDAJAWSVoiceOver
BrowserIEFFCrIEFFCrMaciOS
Reliability when used correctly (25% average)0% 0% 100% 0% 0% 100% 0% 0%
Should work. Fails in 51% - 75% Page with `xml:lang` set on the `html` and `p` elementsBadBadGoodBadBadGoodBadBad

Key

Tests expected to fail (due to authoring errors) are marked with Expected to Fail.

Test notes

All tests were carried out with screen reader factory settings. JAWS in particular has a wide variety of settings controlling exactly what gets spoken.

Screen readers allow users to interact in different modes, and can produce very different results in each mode. The modes used in these tests are:

In the "What the user hears" column: