Кратко
СкопированоСвойство связи из 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>