如果一个 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 等),以及对象的值或状态(如果适用)(输入、组合框、复选框状态)。
这三条信息可以通过眼睛快速确定,并且基本上为您提供了您需要了解的有关对象的所有信息。同样的信息应该出现在辅助技术上。
如果 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 等),以及对象的值或状态(如果适用)(输入、组合框、复选框状态)。
这三条信息可以通过眼睛快速确定,并且基本上为您提供了您需要了解的有关对象的所有信息。同样的信息应该出现在辅助技术上。