aria-invalid https://www.w3.org/TR/wai-aria/#aria-invalid向屏幕阅读器提示该字段有错误。作为屏幕阅读器用户,用户可以通过选项卡浏览<input>
字段,如果该字段无效,他们将收到通知。
Using aria-invalid
也应该与将错误消息与字段关联起来使用(通过aria-describedby https://www.w3.org/TR/wai-aria/#aria-describedby)。如果您在字段下方显示错误,但未将该错误与该字段关联,则屏幕阅读器用户将不会知道该错误。如果你使用aria-invalid
就其本身而言,用户不会知道why该字段有错误。
所以你应该有类似的东西:
<input type="text" name="username" aria-invalid="true" aria-describedby="errmsg">
<span id="errmsg">The name you entered cannot be found in our system</span>
Update:经过进一步澄清后,我看到OP现在要求什么,以及不使用重复信息的参考,例如<nav role="navigation>
.
通过验证 api,伪类(例如:invalid
)已设置,但屏幕阅读器通常(*),不了解或不关心 CSS,也不了解伪类。
((*)唯一的例外是:before
/:after
,可用于可访问名称计算,如步骤中所述2.F.ii
of https://www.w3.org/TR/accname-1.1/#step2 https://www.w3.org/TR/accname-1.1/#step2).
然而,除了伪类:invalid
正在设定中,obj.validity.valid
也被设定。那么如果设置了该属性,是否还需要使用aria-invalid
?或者换个方式问,屏幕阅读器知道validity.valid
属性?
我找不到任何有关屏幕阅读器的文档参考,但从测试来看,Firefox 和 Chrome Surfacevalidity.valid
到屏幕阅读器(JAWS 和 NVDA),以便他们宣布该字段无效。但是 Internet Explorer(我使用的是 Win7,所以没有 Edge)和 iOS 上的 Safari(我没有 Mac 来测试)可以not表面错误的字段。
因此,为了覆盖您的所有基础,我建议设置aria-invalid
。不想冗余固然很好,但至少冗余不会有什么坏处。这只是您必须做的额外代码或输入。