Кратко
СкопированоARIA-атрибуты — это группа дополнительных атрибутов из спецификации WAI-ARIA, которая состоит из свойств и состояний.
Состояния (states) описывают состояния элементов и отвечают на вопрос «В каком состоянии сейчас элемент?».
Свойства (properties) нужны для раскрытия дополнительных функций элементов. Отвечают на вопрос «Что ещё делает этот элемент?».
ARIA-атрибуты поддерживают роли и помогают браузерам и Accessibility API правильно обрабатывать элементы для вспомогательных технологий. Сами по себе, без CSS и JavaScript, они не изменяют внешний вид и функциональность элементов.
Как пишется
СкопированоОбщий синтаксис ARIA-атрибутов — aria.
Для примера сообщим скринридеру с помощью ARIA-атрибута, что у поля есть инструкция к нему.
<label for="psw">Пароль</label><input type="password" name="password" id="psw" aria-describedby="hint"><span id="hint">Пароль должен содержать не меньше 20 знаков</span>
<label for="psw">Пароль</label>
<input
type="password"
name="password"
id="psw"
aria-describedby="hint"
>
<span id="hint">Пароль должен содержать не меньше 20 знаков</span>
aria связывает с помощью одинакового ID два элемента — поле и подсказку из тега <span>. Скринридер озвучит текст подсказки после подписи и основной информации о поле.
В разные атрибуты можно добавлять разные типы значений, не только ID.
Для каких-то атрибутов в качестве значения используют произвольный текст, как для aria:
<button aria-label="Копировать"> <img src="copy-icon.svg" alt=""></button>
<button aria-label="Копировать">
<img src="copy-icon.svg" alt="">
</button>
Есть атрибуты, которые принимают булевы значения true или false. Например, aria:
<span aria-hidden="true">×</span>
<span aria-hidden="true">×</span>
Для других атрибутов используют конкретные токены. К примеру, для aria:
<div class="alert" aria-live="assertive"></div><div class="error" aria-live="polite"></div>
<div class="alert" aria-live="assertive"></div>
<div class="error" aria-live="polite"></div>
Некоторые атрибуты в качестве значения принимают пустую строку — это равно значению false. Например, aria. Однако лучше задавать атрибутам конкретные значения. Так сложнее ошибиться.
<label for="psw">Пароль</label><input type="password" name="password" id="psw" aria-describedby="error" aria-invalid=""><!-- В поле нет ошибки, поэтому скрипт не добавил текст в <span> --><span id="error"></span>
<label for="psw">Пароль</label>
<input
type="password"
name="password"
id="psw"
aria-describedby="error"
aria-invalid=""
>
<!-- В поле нет ошибки, поэтому скрипт не добавил текст в <span> -->
<span id="error"></span>
Список всех типов значений атрибутов есть в спецификации WAI-ARIA 1.2 (Web Accessibility Initiative – Accessible Rich Internet Applications 1.2).
Правила использования
Скопировано- Атрибуты можно задавать любым элементам.
- Для HTML-тегов сначала используйте HTML-атрибуты, а уже потом думайте об ARIA-атрибутах.
- Всегда уточняйте, какие атрибуты сочетаются с явной или встроенной ролью элемента.
- У всех интерактивных элементов, особенно кастомных, должны быть ARIA-атрибуты.
- Следите за тем, какие значения можно использовать для атрибутов.
- Старайтесь не оставлять значение атрибута пустым.
- Значения большинства атрибутов можно динамически изменять.
Типы атрибутов
СкопированоДругая важная особенность атрибутов — атрибуты сочетаются не со всеми ARIA-ролями. Они бывают разных типов в зависимости от функций и связи с ролями элементов.
Список всех ARIA-атрибутов с их подробным описанием есть в спецификации WAI-ARIA 1.2.
Глобальные атрибуты
СкопированоГлобальные атрибуты — самый универсальный тип. Они описывают элементы с любыми ролями.
aria(свойство) — о каком объёме изменений сообщит вспомогательная технология на основе значения- atomic aria. Это вся «живая» область или её часть.- relevant aria(состояние) — вспомогательная технология должна подождать, пока элемент окончательно изменится.- busy aria(свойство) — элемент управляет другим элементом или их группой.- controls aria(состояние) — текущий, выбранный элемент из контейнера или группы элементов.- current aria(свойство) — один элемент или несколько подробно описывают другой элемент.- describedby aria(свойство) — элемент максимально подробно описывает другой.- details aria(свойство) — что произойдёт, когда объект «бросят». Устарело.- dropeffect aria(свойство) — у элементов изменён порядок чтения, и вспомогательная технология может прочитать содержимое в исходном порядке.- flowto aria(состояние) — объект «схвачен». Устарело.- grabbed aria(состояние) — элемент скрыт из дерева доступности и недоступен для вспомогательных технологий.- hidden aria(состояние) — нестандартное сочетание клавиш для взаимодействия с элементом.- keyshortcuts aria(свойство) — имя элемента.- label aria(свойство) — один элемент или несколько содержат подпись для другого.- labelledby aria(свойство) — указание на то, что элемент изменится, тип и важность этого изменения.- live aria(свойство) — один элемент или несколько связаны с другими как родители или дети визуально, функционально или в контексте, но это не отражено в DOM.- owns aria(свойство) — вспомогательная технология объявит об изменениях в «живой» области после определённых изменений в дереве доступности.- relevant aria(свойство) — описание роли на естественном языке.- roledescription
Также есть глобальные атрибуты из черновика спецификации WAI-ARIA 1.3, которые пока не поддерживаются всеми браузерами и вспомогательными технологиями.
aria(свойство) — имя элемента для дисплея Брайля.- braillelabel aria(свойство) — описание роли элемента на естественном языке для дисплея Брайля.- brailleroledescription aria(свойство) — дополнительное подробное описание элемента, которое видно только скринридеру.- description
Атрибуты виджетов
СкопированоАтрибуты для интерактивных элементов, с которыми можно взаимодействовать. Например, для вкладок, выпадающих списков или всплывающих окон.
aria(свойство) — у поля есть выпадающий список с вариантами для автозаполнения.- autocomplete aria(состояние) — отжат или нет интерактивный элемент, например, чекбокс или радиокнопка. Эквивалент в HTML —- checked checked.aria(состояние) — элемент есть на странице, но с ним нельзя взаимодействовать. Эквивалент в HTML —- disabled disabled.aria(свойство) — элемент содержит сообщение об ошибке.- errormessage aria(состояние) — элемент раскрыт или свёрнут.- expanded aria(свойство) — элемент раскрывает попап.- haspopup aria(состояние) — элемент скрыт из дерева доступности и недоступен для вспомогательных технологий.- hidden aria(состояние) — введённые данные не соответствуют нужному формату.- invalid aria(свойство) — имя элемента.- label aria(состояние) — уровень элемента в иерархии элементов.- level aria(состояние) — модальность элемента, когда он не скрыт.- modal aria(свойство) — сколько строк можно ввести в текстовое поле.- multiline aria(свойство) — можно выбрать несколько элементов. Эквивалент в HTML —- multiselectable multiple.aria(свойство) — ориентация элемента на странице.- orientation aria(свойство) — подсказка по заполнению поля. Эквивалент в HTML —- placeholder placeholder.aria(свойство) — позиция или номер элемента среди элементов обычного или древовидного списка.- posinset aria(состояние) — нажат или нет переключатель.- pressed aria(свойство) — элемент недоступен, но можно прочесть его содержимое. Эквивалент в HTML —- readonly readonly.aria(свойство) — обязательное ли поле или нет. Эквивалент в HTML —- required required.aria— выбран или нет интерактивный элемент.- selected aria(свойство) — общее количество элементов из группы, когда не все они отображаются на странице в данный момент.- setsize aria(свойство) — как отсортированы данные в колонке (столбце), строке таблицы или сетки.- sort aria(свойство) — максимальное значение ползунка, индикатора загрузки и других элементов с диапазоном чисел. Эквивалент в HTML —- valuemax maxу<input>.aria(свойство) — минимальное значение ползунка, индикатора загрузки и других элементов с диапазоном чисел. Эквивалент в HTML —- valuemin minу<input>.aria(свойство) — текущее значение ползунка, индикатора загрузки и других элементов с диапазоном чисел. Эквивалент в HTML —- valuenow valueу<input>.aria(свойство) — текстовое описание значений ползунка, индикатора загрузки и других элементов с диапазоном чисел.- valuetext
Атрибуты изменяющихся областей
СкопированоАтрибуты изменяющихся или «живых» областей (live regions) нужны для частей страниц, которые динамически изменяются. К примеру, для сообщений об ошибках, таймеров и оповещений. Их можно применять к любым элементам.
aria(свойство) — о каком объёме изменений сообщит вспомогательная технология на основе значения- atomic aria. Это вся «живая» область или её часть.- relevant aria(состояние) — вспомогательная технология должна подождать, пока элемент окончательно изменится.- busy aria(свойство) — указание на то, что элемент изменится, тип и важность этого изменения.- live aria(свойство) — вспомогательная технология объявит об изменениях в «живой» области после определённых изменений в дереве доступности.- relevant
Атрибуты связи
СкопированоОписывают, как элементы связаны между собой.
aria(свойство) — активный элемент из составного интерактивного элемента. Например, из меню, сетки или комбинированного списка.- activedescendant aria(свойство) — общее количество колонок (столбцов) таблицы, обычной или древовидной сетки.- colcount aria(свойство) — индекс или позиция колонки (столбца) таблицы, обычной или древовидной сетки в виде числа.- colindex aria(свойство) — количество колонок (столбцов), которые объединены в ячейку таблицы, обычной или древовидной сетки. Эквивалент в HTML —- colspan colspan.aria(свойство) — элемент управляет другим элементом или их группой.- controls aria(свойство) — один элемент или несколько подробно описывают другой.- describedby aria(свойство) — элемент максимально подробно описывает другой.- details aria(свойство) — элемент содержит сообщение об ошибке.- errormessage aria(свойство) — у элементов изменён порядок чтения, и вспомогательная технология может прочитать содержимое в исходном порядке.- flowto aria(свойство) — один элемент или несколько содержат подпись для другого.- labelledby aria(свойство) — один элемент или несколько связаны с другими как родители или дети визуально, функционально или в контексте, но это не отражено в DOM.- owns aria(свойство) — текущий порядковый номер или положение элемента из обычного или древовидного списка, когда не все элементы есть на странице в данный момент.- posinset aria(свойство) — общее количество строк таблицы, обычной или древовидной сетки.- rowcount aria(свойство) — индекс или позиция строки таблицы, обычной или древовидной сетки в виде числа.- rowindex aria(свойство) — количество строк, которые объединены в ячейку таблицы, обычной или древовидной сетки. Эквивалент в HTML —- rowspan rowspan.aria(свойство) — общее количество элементов из группы, когда не все они отображаются на странице в данный момент.- setsize
В ARIA 1.3 появятся новые атрибуты связи:
aria(свойство) — индекс или позиция колонки (столбца) таблицы и обычной или древовидной сетки в виде текста.- colindextext aria(свойство) — индекс или позиция строки таблицы и обычной или древовидной сетки в виде текста.- rowindextext
Драг-н-дроп атрибуты
СкопированоНужны для элементов, которые перетаскивают в определённую область страницы.
aria(свойство) — что произойдёт, когда объект «бросят».- dropeffect aria(состояние) — объект «схвачен».- grabbed
Подсказки
Скопировано💡 У семантических тегов и элементов с явными ролями есть свойства и состояния по умолчанию. Они имеют значения false, undefined, none, off или нулевое значение в случае числа, строки, ID и так далее.
💡 Когда не указываете обязательные атрибуты для ролей, браузеры передают вспомогательным технологиям их значения по умолчанию.
💡 Если изменяете роль семантического тега, то вместе с ролью изменятся его свойства и состояния.
💡 Когда задаёте атрибуты родительским элементам, их наследуют и дети. В случае с атрибутом aria это приведёт к проблемам с доступностью, если в родительский элемент вложен интерактивный. Тогда кнопка, ссылка или что-то другое станут невидимыми для скринридеров.
💡 Значения HTML-атрибутов перезаписывают значения ARIA-атрибутов. Исключения — aria, aria и aria.
<!-- Скринридер прочтёт «Введите пароль» из HTML-атрибута placeholder --><label for="psw">Пароль</label><input type="password" name="password" id="psw" placeholder="Введите пароль" aria-placeholder="Введите свой невероятно сложный пароль"><!-- Скринридер прочтёт «Закрыть окно» из ARIA-атрибута aria-label --><button aria-label="Закрыть окно"> <img src="cross.svg" alt="Закрыть"></button>
<!-- Скринридер прочтёт «Введите пароль» из HTML-атрибута placeholder -->
<label for="psw">Пароль</label>
<input
type="password"
name="password"
id="psw"
placeholder="Введите пароль"
aria-placeholder="Введите свой невероятно сложный пароль"
>
<!-- Скринридер прочтёт «Закрыть окно» из ARIA-атрибута aria-label -->
<button aria-label="Закрыть окно">
<img src="cross.svg" alt="Закрыть">
</button>
Ссылки
Скопировано- Таблица с HTML-атрибутами и их эквивалентами в ARIA из спецификации ARIA in HTML.
- ARIA states and properties, MDN.
- ARIA Spec for the Uninitiated: Part 3, Джерард Коэн.