我目前正在制作一个可访问的网站,其中使用了ARIA标签等内容。我意识到像aria-invalid
这样的属性将是我的CSS选择器的好选择,而不是使用.error
类。
这样做的好处是HTML更加简洁、有意义,对于我从CSS(和JS)中挂钩更加容易。尽管如此,我还没有在其他地方看到这样的实践,所以我怀疑利用无障碍标签进行样式设计会有缺陷。我猜想使用未受限制的属性选择器会导致性能较差的CSS,但是是否还存在其他我没有考虑到的缺点呢?
我目前正在制作一个可访问的网站,其中使用了ARIA标签等内容。我意识到像aria-invalid
这样的属性将是我的CSS选择器的好选择,而不是使用.error
类。
这样做的好处是HTML更加简洁、有意义,对于我从CSS(和JS)中挂钩更加容易。尽管如此,我还没有在其他地方看到这样的实践,所以我怀疑利用无障碍标签进行样式设计会有缺陷。我猜想使用未受限制的属性选择器会导致性能较差的CSS,但是是否还存在其他我没有考虑到的缺点呢?
属性选择器是管理大规模CSS样式的一种非常灵活的方式,因为属性选择器始终具有0-0-1-0的优先级。
[aria-*]
选择器非常适合用作样式钩子,我还建议使用自定义的[data-*]
属性填补可能需要单独处理的空白。当然,应该继续使用类选择器,但是您可以通过属性选择器实现一些非常优雅的样式扩展:
[data-foo] {
color: red;
}
[data-foo="bar"] {
color: blue;
}
[data-foo="fizz"] {
color: green;
}
每个选择器的特异性相同,级联会适当地应用样式。
如果需要,您可以通过使用[attr~="value"]
选择器创建自己的类的形式。
使用"包含属性"选择器对于我称之为“优雅图片”的技术非常有用
使用属性而不是类的一个隐藏好处是在JavaScript中获得了性能提升。浏览器长期以来支持getAttribute
、hasAttribute
和setAttribute
,而不是必须检查元素上是否存在类(这很容易出错)。
你需要明白像 aria-invalid
这样的属性应该尽量避免使用。如果有本地语义可用,你应该始终使用本地语义(例如在输入元素上使用 required
)。这被称为ARIA 的第一条规则。
我认为你真正想要的是添加样式到计算的 ARIA 状态和属性。不幸的是,目前 CSS 不支持这个功能。
总之:使用 [aria-invalid]
作为 CSS 选择器没有问题。但它并不能帮助你太多,因为你应该尽量避免使用那个属性。
#foo[aria-busy="true"]
是有效的 CSS,div[aria-checked="false"]
也是如此。 - slugolicious<input required value="">
和 <input aria-invalid="true">
都是无效的。一个使用本地语义,另一个使用 ARIA 属性。 - tobibrequired
属性并不是一个ARIA属性。 - slugolicioussetCustomValidity
方法。在这种情况下,aria-invalid="true"
对于告诉浏览器输入失败了某些JS检查是有用的。 - ehdv