标准 · ARIA

角色 地标

form

表单地标 — 用于提交数据的一组输入控件。<form> 元素仅在拥有无障碍名称时才会作为表单地标暴露。若无名称,它只是一个普通表单,而非地标。

何时使用

用于重要的表单 — 注册、结账、联系、编辑个人信息等 — 这类表单值得作为地标参与导航。与 region 类似,<form> 元素仅在拥有无障碍名称(aria-labelaria-labelledby)时才会被提升为表单地标。

表单的无障碍名称应描述其用途,如”联系表单”、“注册”、“编辑个人信息”。避免使用泛化的”表单” — 与角色宣告内容重复。

若该表单是搜索表单,应改用 <search>(或 role="search") — 搜索地标更为具体。

单个输入框的简报订阅或搜索框不需要使用表单地标。此角色应保留给具有三个或更多有意义输入项且用途明确的表单。

何时添加标签

始终需要标签 — 若没有名称,<form> 不会成为地标。当页面中存在多个表单(例如评论表单和简报订阅表单)时,每个表单必须拥有不同的名称。

优先使用 aria-labelledby 指向可见标题,而非 aria-label — 这样可以将可见标题与地标宣告关联起来。

常见错误

  • <form> 既无 aria-label 也无 aria-labelledby。该表单不是地标,用户无法通过地标导航跳转至此。
  • aria-label="Form" — 与角色宣告重复,意义不大。
  • 同时使用 <form role="search">aria-label="Search"。搜索地标已涵盖此场景;再加 form 角色会产生冲突。
  • 登录表单和注册表单都标注为”Sign in” — 在地标菜单中无法区分。
  • 在单个输入框外包裹 <form> 并将其标注为表单地标。过度使用;此处添加地标并无实际价值。

示例

<form aria-labelledby="contactHeading">
  <h2 id="contactHeading">Contact us</h2>
  <label>Name <input type="text" name="name" required></label>
  <label>Email <input type="email" name="email" required></label>
  <label>Message <textarea name="message" required></textarea></label>
  <button type="submit">Send</button>
</form>