Кратко
Скопировано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, Джерард Коэн.