如果一个 HTML 元素有 role="button" 它应该也有属性 "name"

If an HTML element has role="button" should it also have the attribute "name"

如果 HTML5 <div> 元素需要 role="button" 属性来确保可访问性审核的成功结果(成功标准 4.1.2 [名称、角色、值].. div 充当 UI 中的按钮),它是否还需要有效的 name 属性(对于 [=16= 通常无效 HTML5 ]).

如果答案是否定的 - 我可以添加哪些其他辅助功能友好属性来描述 div 按钮并满足条件?一个简单的 title 属性或 aria-label?

无法添加属性name

按钮应始终具有易于访问的名称。对于大多数按钮,此名称将与按钮内的文本相同。在某些情况下,例如对于图标按钮,可以通过 aria-label 或 aria-labelledby 属性提供可访问的名称。

更多详情请参考这里:Using Button Role

<div>name 属性不存在,无法添加。

您将需要 aria-label 提供一个易于访问的名称。

但是,如果您只是想通过 SC 4.1.2,那么您可能采用了错误的方法。事实上,如果您无法在屏幕 reader 中测试 aria-label 以确认它按您想要的方式工作,那么您就是在编写清单而不是真正帮助用户。

如果是这种情况,那么您可能应该放弃 <div role="button">,而是从最适合该工作的元素开始。

一个好的经验法则是永远不要让自己处于更改元素默认语义的情况(通过 role)。

已经有三个元素可以先满足您的要求。在您的问题没有上下文的情况下,关于何时使用 <a href><button><input type="submit"> 的一些一般提示:

  • 如果用户要转到新页面(或页面上的锚点),请使用 <a href> (spec)。
  • 如果用户正在更改当前页面上的状态,请使用 <button> (spec)。
  • 如果用户正在提交表单,请使用 <input type="submit"><button type="submit"> (spec)。

我告诫不要更改具有 role 属性的元素的默认角色,因为这最终会导致一些混乱,并可能与某些辅助技术发生冲突。这些也违反了 ARIA 使用的 first and second 规则。

还要考虑键盘体验。如果您所做的只是更改元素的 role,那么您还必须提供所有脚本以允许它作为新元素运行。

超链接 (<a href>) 可以通过按 enter 键来触发。但是可以通过按回车键或 space 栏来触发真正的 <button>。当超链接获得焦点并且用户按下 space 栏时,页面将滚动一屏。某些辅助技术的用户会期望基于所用元素的行为。

我认为还值得一提的是,由 space 条触发的事件仅在释放按键时触发,而使用 Enter 键会在您按下按键时立即触发事件(在释放它)。

因此,使用上面的列表从正确的任务元素开始,然后根据需要设置样式。

我认为最初的问题是因为对 "name" 在 "WCAG 4.1.2 Name, Role, Value" 中的含义有些混淆。

name 属性在 <div> 上确实无效。 name= 用于命名对象,以便在 javascript 中引用它。它与可访问性无关。

4.1.2中的"name"是指屏幕reader和其他辅助技术将调用什么对象。对于按钮,通常是显示在按钮上的文本。对于输入字段,它通常是字段的标签。如果您有 <div>,那么正如其他人所指出的,aria-label 就是您 "name" 对象的方式。

当焦点转到对象时,大多数屏幕 reader 将读取对象的 name/label、角色(按钮、复选框、组合框、table 等),以及对象的值或状态(如果适用)(输入、组合框、复选框状态)。

这三条信息可以通过眼睛快速确定,并且基本上为您提供了您需要了解的有关对象的所有信息。同样的信息应该出现在辅助技术上。