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

I tested using the following shorcuts, commands and gestures.

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.

form role test results
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.

search role test results
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>