使用语义 HTML 轻松获得键盘操作优势

通过使用正确的语义 HTML 元素,你或许能够满足大部分或全部键盘访问需求。这意味着减少调整 tabindex 的时间,并让用户更满意!

免费的键盘支持(以及更佳的移动体验)

有许多内置的交互式元素具有适当的语义和键盘支持。开发者最常使用的元素有:

此外,带有 contenteditable 属性的元素有时用于自由格式文本输入。

这些元素提供的内置键盘支持很容易被忽视。以下是一些示例元素供你探索。请尝试使用键盘操作它们,而不是使用鼠标。你可以使用 TAB(或 SHIFT + TAB)在控件之间移动,并且可以使用箭头键和 ENTERSPACE 等键来操作它们的值。

如果你手边有手机,你会发现许多时候这些内置元素在移动设备上具有独特的交互方式。尝试自行重现这些移动交互方式需要大量工作!这是尽可能坚持使用内置元素的另一个充分理由。

使用 button 而不是 div

常见的无障碍功能反模式是将非交互式元素(例如 divspan)视为按钮,方法是向其添加点击处理程序。

但是,要被视为可访问,按钮应具备以下条件:

  • 可通过键盘聚焦
  • 支持禁用
  • 支持使用 ENTER 键或 SPACE 键执行操作
  • 可由屏幕阅读器正确播报

div 按钮不具备这些特性。这意味着你需要编写额外的代码来复制 button 元素免费提供的功能!

例如,button 元素有一个叫做 *合成点击激活* 的巧妙技巧。如果你向 button 添加“click”处理程序,则当用户按下 ENTER 键或 SPACE 键时,它将运行。 div 按钮不具备此功能,因此你需要编写额外的代码来监听 keydown 事件,检查键码是否为 ENTERSPACE,然后运行你的点击处理程序。哎哟!这需要做很多额外的工作!

比较此示例中的差异。使用 TAB 键移至任一控件,并使用 ENTER 键和 SPACE 键尝试点击它们。

如果你的现有网站或应用中有 div 按钮,请考虑将它们替换为 button 元素。 button 易于样式化,并且在无障碍功能方面优势多多!

另一个常见的反模式是将链接视为按钮,方法是向其附加 JavaScript 行为。

<a href="#" onclick="// perform some action">

按钮和链接都支持某种形式的合成点击激活。那么应该选择哪一个呢?

  • 如果点击元素将在页面上执行操作,请使用 <button>
  • 如果点击元素将导航用户到新页面,则使用 <a>。这包括加载新内容并使用 History API 更新网址的单页 Web 应用。

这样做的原因是屏幕阅读器对按钮和链接的播报方式不同。使用正确的元素有助于屏幕阅读器用户了解预期结果。

待办事项:DevSite - 思考和检查评估

样式设置

某些内置元素,尤其是 <input>,可能难以设置样式。通过一些巧妙的 CSS,你或许能够解决其中一些限制。(名字很搞笑的)WTFForms 项目包含一个 示例样式表,其中演示了多种用于设置一些较难内置元素样式的技巧。

后续步骤

使用内置 HTML 元素可以大大提高网站的无障碍功能,并显著减少你的工作量。尝试在你的网站上使用 Tab 键进行浏览,并查找任何缺少键盘支持的控件。如果可能,请将它们替换为标准化的 HTML 替代方案。

有时你可能会发现某个元素在 HTML 中没有对应的元素。没关系!继续阅读以了解如何使用 tabindex 向自定义交互式控件添加键盘支持。