Кратко
СкопированоСвойство связи из WAI-ARIA для одного или нескольких элементов с видимым именем (подписью) для другого.
Пример
Скопировано<figure aria-labelledby="group-label"> <img src="images/chart.png" alt="Прогресс похудения за 9 недель. Сначала ёж весил 11 килограмм, в конце — 4 килограмма." > <figcaption id="group-label">График похудения ежа.</figcaption></figure>
<figure aria-labelledby="group-label"> <img src="images/chart.png" alt="Прогресс похудения за 9 недель. Сначала ёж весил 11 килограмм, в конце — 4 килограмма." > <figcaption id="group-label">График похудения ежа.</figcaption> </figure>
Скринридеры прочтут пример так: «График похудения ежа, группа. Прогресс похудения за 9 недель. Сначала ёж весил 11 килограмм, в конце — 4 килограмма, графика».
Как пишется
СкопированоЗадайте тегу атрибут aria
с одним или несколькими ID через пробел и свяжите с ним элемент с подписью при помощи id
.
aria
можно использовать для всех интерактивных и неинтерактивных элементов вроде таблиц и графики, кроме:
<caption>
и ролиcaption
.<code>
и ролиcode
.<dd>
и ролиdefinition
.<dt>
,<dfn>
и ролиterm
.<del>
и ролиdeletion
.<em>
и ролиemphasis
.<ins>
и ролиinsertion
.<mark>
и ролиmark
.<p>
и ролиparagraph
.<strong>
и ролиstrong
.<sub>
и ролиsubscript
.<sup>
и ролиsuperscript
.<time>
и ролиtime
.<span>
,<div>
и ролиgeneric
.- роли
presentation
илиnone
иsuggestion
.
Для <input>
в первую очередь используйте <label>
. У этого HTML-тега есть важная особенность — при клике по тегу фокус перемещается на поле по умолчанию.
Ещё aria
можно связывать не только с видимыми элементами, но и со скрытыми с помощью hidden
, display
или visibility
. Учитывайте, что скринридер всё равно в этом случае прочитает связанную с элементом подпись к нему.
В примере у переключателя скрыт лейбл «Ночной режим», но он всё равно доступен для вспомогательных технологий.
<span id="label" hidden>Ночной режим</span><input type="checkbox" role="switch" aria-labelledby="label">
<span id="label" hidden>Ночной режим</span> <input type="checkbox" role="switch" aria-labelledby="label">
Подпись из aria
должна быть краткой и чётко описывать цель элемента. При этом лучше не изменять её динамически, это запутает пользователей.
aria
перезаписывает другие текстовые значения. К примеру, из aria
или <label>
. Так что используйте атрибут с осторожностью с некоторыми ролями и тегами.
Когда у <table>
есть одновременно <caption>
и aria
, таблица получит имя из атрибута, а содержимое <caption>
станет её описанием.
Порядок ID в aria
имеет значение. Скринридер читает лейблы в том порядке, в каком они перечислены в атрибуте. Ещё он не повторяет лейблы, если ID дублируются.
В этом примере при фокусе на первом пункте скринридер прочтёт: «Вес один кг».
<label id="label1" for="select">Вес</label><select id="select" aria-labelledby="label1 label1 select label2 label2"> <option value="1">1</option> <option value="2">2</option></select><span id="label2">кг</span>
<label id="label1" for="select">Вес</label> <select id="select" aria-labelledby="label1 label1 select label2 label2" > <option value="1">1</option> <option value="2">2</option> </select> <span id="label2">кг</span>
Как понять
СкопированоПодпись, по-другому видимый идентификатор в ARIA — это видимое имя любого элемента, не только поля как в HTML. А имя или доступное имя элемента — краткое название элемента, которое озвучивает скринридер при фокусе или последовательном зачитывании всего контента. Оно не обязательно видно всем пользователям.
Чаще всего достаточно связать подпись с нужным тегом с помощью for
. Например, <label>
, <caption>
или <legend>
.
Когда в HTML нельзя задать элементу подпись, на помощь приходит атрибут aria
.
Подсказки
Скопировано💡 aria
очень похож на <label>
, который можно задавать не только элементам формы.
💡 Если имя элемента должен видеть только скринридер, используйте aria
.
💡 Следите за поддержкой aria
в браузерах и у скринридеров, особенно если задаёте атрибут статичному контенту.
На практике
Скопированосоветует Скопировано
Полезный случай использования aria
— лейблы к <section>
. Благодаря лейблам пользователи скринридеров могут использовать целые секции как оглавление и быстро перемещаться между ними.
<section aria-labelledby="heading"> <h2 id="heading">Котики как вид</h2> <!-- Текст про котиков --></section>
<section aria-labelledby="heading"> <h2 id="heading">Котики как вид</h2> <!-- Текст про котиков --> </section>