Есть ли причины не использовать состояния и роли ARIA в качестве селекторов в CSS?

в настоящее время я работаю над созданием доступного сайта, используя, среди прочего, теги ARIA. Мне пришло в голову, что такие атрибуты, как aria-invalid были бы хорошими селекторами для моего CSS, а не с помощью .error класса.

преимущество этого-более компактный, более значимый HTML, который мне легче подключить из CSS (и JS). Тем не менее, я не видел этого в другом месте, поэтому я подозреваю, что есть недостатки в использовании тегов доступности для стиля. Я подозреваю, что использование неограниченных селекторов атрибутов делает менее эффективным CSS, но есть ли другие недостатки, которые я не рассматривал?

2 ответов


селекторы атрибутов - очень гибкий способ управления стилями для крупномасштабного CSS, потому что селекторы атрибутов всегда будут иметь специфика 0-0-1-0.

[aria-*] селекторы отлично подходят для использования в качестве крючков для укладки, и я также рекомендую использовать custom [data-*] атрибуты для заполнения пробелов, где вам может понадобиться одноразовый. Конечно, селекторы классов должны продолжать использоваться, однако вы можете сделать некоторые очень элегантные расширения стиля с атрибутом селекторы:

[data-foo] {
    color: red;
}
[data-foo="bar"] {
    color: blue;
}
[data-foo="fizz"] {
    color: green;
}

каждый из этих селекторов имеет одинаковую спецификацию, и каскад позволит применять стили соответствующим образом.

вы можете создать свою собственную форму классов, используя [attr~="value"] селектор если нужно.

С помощью атрибут"содержит" селектор может быть полезно для техника, которую я называю "классные изображения"


одно из скрытых преимуществ использования атрибутов над классами это увеличение производительности в JavaScript. Вместо того, чтобы проверять наличие класса на элементе (что удивительно легко ошибиться), браузеры поддерживают getAttribute, hasAttribute и setAttribute в течение длительного времени.


вам нужно понять, что атрибуты, такие как aria-invalid следует избегать в первую очередь. Вы всегда должны использовать родную семантику, если она доступна (например,required на входных элементах). Это называется первое правило арии.

Я думаю, что вы действительно хотите, чтобы добавить стиль к вычисляемые состояния и свойства арии. К сожалению, на данный момент это не поддерживается в CSS.

в резюме: Нет ничего плохого в использовании [aria-invalid] как a CSS-селекторы. Это просто не поможет вам, потому что вы должны избегать этого атрибута в первую очередь.