在可访问性方面,有人能否向我描述一下对于屏幕阅读器和键盘用户来说,<button>
和 <a>
的区别? 据我所知,键盘用户可以使用 ENTER
和 SPACE
来激活按钮,而只有用 ENTER
来激活锚标签。在单页应用程序中,我觉得这些元素的角色有点混淆,我不确定两者之间的界限在哪里。
看起来像链接的按钮
在我的应用程序中,我对链接有一个通用样式,这个样式的类名简单地为 .link
。
在第一个示例中,我有一个按钮,它具有一个在同一页上执行操作的 onclick 处理程序,因此我使用了一个按钮元素。 但是,它的样式上看起来像一个链接。
<button class="link" onclick={(e) => console.log('Do the thing')}>This is a link</button>
如果角色颠倒,链接的行为像传统的锚点一样,其中路由会因为被点击而改变,我会这样做:结果:如果角色颠倒,链接的行为像传统的锚点一样,其中路由会因为被点击而改变,我会这样做:
<a class="link" href="/route/change">This is a link</a>
尽管由于应用的类别,这两个元素看起来相同,但是是否应该将role="button"
应用于锚标签示例以使其行为像一个按钮,即使它的样式像一个链接?对于具有辅助功能需要的用户,在整个应用程序中保持这些样式化元素之间的一致性更好,还是基于元素的应用而不考虑其样式,交换哪个元素得到应用角色更好?
旁边的两个“按钮”
追加第一个问题。如果<a>
标记的定义是将您移动到不同的页面/锚点,则执行不同任务的两个并排按钮都应被视为按钮。
以以下示例为例,确认按钮在同一页面上执行操作,而取消按钮则将您路由回以前的页面。
代码看起来像这样:
<button onclick={() => console.log('do a thing'}>Confirm</button>
<a href="/home">Cancel</a>
来自 MDN的role="button"
定义如下:
应该将按钮角色用于可点击的元素,这些元素在用户激活时会触发响应。添加
role="button"
将使元素显示为屏幕阅读器的按钮控件。可以将此角色与aria-pressed属性结合使用以创建切换按钮。
即使取消按钮从技术上来说不符合角色定义的方式,它是否应用了按钮角色?
关闭
是否有更简明的指南说明何时应该使用和不使用这些角色?如果具有相同样式的所有/任何链接与
<button>
元素中删除角色,因为它已经被暗示了,但它看起来像一个链接。 - James Ivesrole="button"
?如果一个功能按钮看起来像链接,那么在整个应用程序中应该具有相同一致的角色,即如果有一些具有相同样式的按钮元素,则所有相同外观的“链接”都应该具有按钮角色。我没有使用Bootstrap,但是您提供的示例并没有说明屏幕阅读器如何查看元���或期望的内容。 - James Ives