是否可以强制屏幕阅读器读取alt属性而不是按钮内的文本?
示例html:<button alt="user menu">DrKawashima</button>
在MacOS中使用内置的辅助功能屏幕阅读器进行测试时,我发现它只说“ DrKawashima”,而从未使用过alt属性。
有没有一种方法可以向屏幕阅读器提示我宁愿说“用户菜单”?
答案 0 :(得分:2)
您最好的选择是在<span>
中使用带有<button>
的样式aria-hidden
标记
<button aria-label="screen reader text">
<span aria-hidden="true">Visual Text</span>
</button>
编辑:如评论所讨论,这不是最佳方法。 作为语音控制用户无法激活此按钮。
andrewmacpherson的答案为此提供了更全面的解决方案。
答案 1 :(得分:2)
'alt'在button元素内不是允许的属性。 alt属性适用于area,img和input type =“ image”。进一步了解主题https://www.w3.org/TR/html5/dom.html#translatable-attributes和https://www.w3.org/TR/html5/dom.html#global-attributes-2
答案 2 :(得分:2)
是的,有可能-但要注意完全覆盖按钮的可见文本。
tl; dr-我在这里推荐方法4。
您的问题针对的是屏幕阅读器,但是还需要考虑其他类型的辅助技术。特别是有视力的人使用语音控制(例如,Dragon Naturally Speaking)。请注意地址WCAG Success Criterion 2.5.3: Label in Name。
辅助技术处理元素的computed accessible name:
请注意,计算出的可访问名称和可见文本不必完全匹配。而是,可见文本必须形成可访问名称的 part 。
让我们看一些示例:
您的示例在按钮上具有alt属性根本无法工作,因为按钮没有alt属性。这是无效的HTML:
<button alt="user menu">DrKawashima</button>
。
alt
属性无效。 aria-label
属性可用于完全覆盖按钮内容:<button aria-label="user menu">DrKawashima</button>
。
aria-label
属性会完全覆盖按钮内容。 aria-label
属性可用于完全覆盖按钮内容,同时复制可见文本:<button aria-label="DrKawashima, User menu">DrKawashima</button>
。
aria-label
属性会完全覆盖按钮内容,但会复制可见的文本。包括一些视觉上隐藏的文本,以便为屏幕阅读器用户提供其他上下文。例如,使用HTML5Boilerplate的.visuallyhidden
类或Bootstrap的.sr-only
类:
<button>DrKawashima<span class="visuallyhidden">, User menu</span></button>
aria-labelledby
属性可以通过引用2个元素ID来构建可访问的名称:
<button aria-labelledby="user-menu-visible-label user-menu-suffix"><span id="user-menu-visible-label">DrKawashima</span><span id="user-menu-suffix" class="visuallyhidden">, User menu</span></button>
aria-labelledby
引用的两个元素进行串联而造成的。