aria-label、aria-labelledby和aria-describedby:屏幕阅读器中行为非常不可预测

7
我注意到尽管aria-labelaria-labelledbyaria-describedby属性被称为适用于每个元素(请参见https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-describedby),但它们似乎仅适用于一些元素,例如 a,而不适用于NVDA和JAWS中的divp等元素。
我创建了一个小的CodePen来演示这个问题(使用浏览模式和焦点模式浏览): https://codepen.io/jmuheim/pen/avWbPe 例如,在NVDA中,在a元素上,aria-labelaria-labelledby在浏览模式和焦点模式下都能工作。但是aria-describedby只在焦点模式下被宣布,而不是在浏览模式下。
对于input元素,在浏览模式下,这些属性似乎都不起作用,但在焦点模式下都能正常工作。
对于像pdiv这样的“裸文本”元素,这些属性似乎都不起作用。
在JAWS中,行为非常相似,但是对于p元素,当有aria-describedby时,它会宣布可以通过按“JAWS + alt + r”来读取描述。
我没有看到明显的模式,所以我想知道屏幕阅读器使用这些属性的一般规则是什么?或者更好的问题:为什么它们不像规范建议的那样适用于每个元素?

Léonie Watson 在 The Paciello Group 网站上撰写的一篇很棒的文章,关于以下内容:https://www.tpgi.com/short-note-on-aria-label-aria-labelledby-and-aria-describedby/ - mrtnmgs
1个回答

10

ARIA不定义辅助技术如何显示用户界面。但是,它确实定义了浏览器通过辅助功能API公开角色、状态和属性的要求。就像HTML一般,HTML规范不定义/要求用户界面,这取决于浏览器的决定。 例如,在aria-label的情况下,ARIA要求将aria-label映射到辅助功能API中的可访问名称属性,但并不要求屏幕阅读器在任何给定元素上宣布它或不宣布它(即作为声音界面的一部分公开)。 通常的规则是,屏幕阅读器会在交互式元素上宣布可访问名称和可访问描述。他们会在大多数分组元素分节元素上宣布可访问名称。他们通常不会在大多数文本级别元素上宣布。
注意:上述内容也适用于任何使用ARIA角色覆盖其默认语义的元素。例如,ARIA widget roles将像本机HTML交互元素一样同时宣布acc名称和描述。

1
感谢您的解释和提供的资源。我在NVDA问题跟踪器上提出了同样的问题,那里也有一些与NVDA相关的信息。 - Joshua Muheim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接