WCAG 2.0 aria-labelledby 表格 header 和免责声明

WCAG 2.0 aria-labelledby for form header and disclaimer

当您尝试在表格的顶部。我认为这就是我认为的完成方式,但我是辅助功能的新手,所以任何更正将不胜感激!

<form id="profile optional">
  <h1 arialabelledby="profile">Profile</h1>
  <p aria-describedby="optional">All fields are required unless marked optional</p>

  <fieldset>
    <legend id="userInfo" aria-labelledby="formA">User Info</legend>

    <div class="form-control">
      <label id="firstName" for="firstName">First Name</label>
      <input type="text" name="firstName" aria-labelledby="firstName userInfo" aria-required="true" aria-describedby="error-message"/>
      <span id="error-message" style="display:none" aria-hidden="true">Name is required</span>
    </div>

    <div class="form-control">
      <label id="lastName" for="lastName">Last Name</label>
      <input type="text" name="lastName" aria-labelledby="lastName userInfo" aria-required="true" aria-describedby="error-message"/>
      <span id="error-message" style="display:none" aria-hidden="true">Name is required</span>
    </div>

    <div class="form-control">
      <label id="nickName" for="nickName">Nick Name (optional)</label>
      <input type="text" name="nickName" aria-labelledby="nickName userInfo"/>
    </div>
  <fieldset>

  <fieldset>
  ...
  </fieldset>

  <button type="submit" aria-label="Submit Profile">Submit</button>
</form>

编辑*提交按钮的代码

这是您不需要任何 ARIA 的情况。您可以退回到良好的用户体验,这将使 ARIA 变得不必要。

在表格的开头,您提供了所有字段都是必填项的说明。那很好。然后对于选项字段,您在 <label> 中包含“(可选)”。这样也好

你可以到此为止,一切就绪。

但是,您已将 ARIA 添加到表单中,并向后获取了一些。例如:

<form id="profile optional">
 <h1 arialabelledby="profile">Profile</h1>
 <p aria-describedby="optional">All fields are required unless marked optional</p>

您是在告诉 <form> 标记的 <h1> 什么时候应该反过来。您还告诉 <p> 它正在由 <form> 描述,这又是相反的方式。把所有这些都拉出来。

或者以这个案例为例:

<div class="form-control">
  <label id="lastName" for="lastName">Last Name</label>
  <input type="text" name="lastName" aria-labelledby="lastName userInfo" aria-required="true" aria-describedby="error-message"/>
  <span id="error-message" style="display:none" aria-hidden="true">Name is required</span>
</div>

<input> 不需要 aria-labelledby<label> 是免费的。此外,将它与 <legend> 相关联会使它更加冗长并且会使用户感到困惑。

您还应该删除 aria-required 并只使用 HTML5 布尔值 requiredIt is well supported 并有利于非屏幕 reader 用户。

虽然我怀疑您只会在出现错误时显示错误消息,但您可以将其完全删除并让浏览器处理。如果您需要保留它以实现向后兼容,请删除 aria-hidden,因为 display:none 无论如何都会将其从屏幕 reader 中隐藏。

按钮也是如此。转储 ARIA 并使其成为 <button type="submit">Submit Profile</button>。您的所有用户都将受益于更详细的按钮。

既然你很好地利用了<legend><fieldset>,你可以把那些东西都留下来,而且你的状态很好。

您刚刚创建了一个可访问、可用、无 ARIA 的表单。无 ARIA 是一件好事。 ARIA 是一种桥接技术,仅应在常规 HTML.

中没有可供性的情况下使用