form and search landmarks
posted on
I wanted to know how well common screen readers and browsers support search
and form
landmarks. Here are my results:
Software/OS/browser
- NVDA 2023.1 with Firefox 114
- VoiceOver macOS 13.4.1 with Safari 16.5.1
- Talkback Android 13 with Chrome 114
- JAWS 2023.2212.13 with Edge 114
- Narrator Windows 10 with Edge 114
- VoiceOver iOS 15.7.7 with Safari
I tested using the following shorcuts, commands and gestures.
- D key + Elements list in NVDA
- Rotor in VO iOS
- Rotor + single key quick nav in VO macOS
- Swiping + landmark navigation in Talkback
- R key + landmarks list (Insert + Ctrl + R in JAWS
- D key + Landmarks List in Narrator
form role
Summary: You can use it, but forms won't be exposed as landmarks on VoiceOver and Talkback. To get the best results label the form.
NVDA | Voice Over (macOS) | Talkback | Jaws | Narrator | VoiceOver (iOs) | |
---|---|---|---|---|---|---|
no role and no label | no landmark | no landmark | no landmark * | no landmark | no landmark | no landmark |
no role, labelled by heading | form (labelled) | no landmark | no landmark * | form (labelled) | form landmark (labelled) | no landmark |
role but no label | form (unlabelled) | no landmark | no landmark * | no landmark | form landmark (unlabelled) | no landmark |
role, labelled by heading | form (labelled) | no landmark | no landmark * | form (labelled) | form landmark (labelled) | no landmark |
no role, labelled by legend | form (labelled) | no landmark | no landmark * | group (labelled) ** | form landmark (labelled) | no landmark |
role, labelled by legend | form (labelled) | no landmark | no landmark * | group (labelled) ** | form landmark (labelled) | no landmark |
* not announced as a “form” landmark, but it's accessible via landmark navigation
** listed as “form” landmark in the landmarks list
form with no role and no label
<form>
<h3>example 1</h3>
<label>
XY
<input type="text">
</label>
</form>
form with no role, labelled by heading
<h3 id="form2">example2</h3>
<form aria-labelledby="form2">
<label>
XY
<input type="text">
</label>
</form>
form with form role and no label
<form role="form">
<label>
XY
<input type="text">
</label>
</form>
form with form role labelled by heading
<h3 id="form4">example 4</h3>
<form role="form" aria-labelledby="form4">
<label>
XY
<input type="text">
</label>
</form>
form with no role labelled by legend
<form aria-labelledby="form5">
<fieldset>
<legend id="form5">example 5</legend>
<label>
XY
<input type="text">
</label>
</fieldset>
</form>
form with form role labelled by legend
<form role="form" aria-labelledby="form6">
<fieldset>
<legend id="form6">example 6</legend>
<label>
XY
<input type="text">
</label>
</fieldset>
</form>
search role
Summary: Great overall support for the search
role. The <search>
element has no support yet. You can use the search element in combination with the role
attribute.
NVDA | Voice Over (macOS) | Talkback | Jaws | Narrator | VoiceOver (iOs) | |
---|---|---|---|---|---|---|
role but no label | search landmark (unlabelled) | search (unlabelled) | search (unlabelled) | search region (unlabelled) | search landmark (unlabelled) | search landmark (unlabelled) |
role, labelled by heading | search landmark (labelled) | search (labelled) | search (labelled) | search region (labelled) | search landmark (labelled) | search landmark (labelled) |
search element with no label | no landmark | no landmark | no landmark * | no landmark | no landmark | no landmark |
search element with role but no label | search landmark (unlabelled) | search (unlabelled) | search (unlabelled) | search region (unlabelled) | search landmark (unlabelled) | search landmark (unlabelled) |
search element with role, labelled by heading | search landmark (labelled) | search (labelled) | search (labelled) | search region (labelled) | search landmark (labelled) | search landmark (labelled) |
form with search role and no label
<form role="search">
<label>
XY
<input type="text">
</label>
</form>
form with search role labelled by heading
<h3 id="form8">example 8</h3>
<form role="search" aria-labelledby="form8">
<label>
XY
<input type="text">
</label>
</form>
search element with no label
<search>
<form>
<label>
XY
<input type="text">
</label>
</form>
</search>
search element with search role and no label
<search role="search">
<form>
<label>
XY
<input type="text">
</label>
</form>
</search>
search element with search role labelled by heading
<search role="search" aria-labelledby="form11">
<h3 id="form11">example 11</h3>
<form>
<label>
XY
<input type="text">
</label>
</form>
</search>