Accessible Rich Internet Applications (ARIA) — это набор атрибутов для улучшения доступности веб-контента, особенно динамического и интерактивного. Библиотека Axe-core предоставляет мощный инструмент для автоматизированной проверки соответствия веб-страниц ARIA-спецификациям и общим принципам доступности.
Корректность использования атрибутов ARIA
Axe-core анализирует элементы на предмет правильного применения
ARIA-атрибутов, таких как role, aria-label,
aria-labelledby, aria-describedby.
Несоответствие спецификации может вызвать ошибки в считывании контента
вспомогательными технологиями.
Пример: элемент с ролью button должен
быть интерактивным, а наличие aria-pressed должно
использоваться только для кнопок, которые могут быть в состояниях
“включено/выключено”.
Согласованность ролей и семантики Проверяется
соответствие роли элемента его нативной семантике. Например,
<div role="button"> требует дополнительной обработки
клавиатуры для имитации поведения кнопки. Axe-core выявляет такие
несоответствия, предупреждая о возможных проблемах доступности.
Наличие обязательных атрибутов Некоторые ARIA-ролии требуют обязательных атрибутов для корректной работы.
role="alert" не требует дополнительных атрибутов, но
должен содержать текстовое содержимое.role="combobox" требует указания связанного списка
элементов через aria-controls и корректного управления
фокусом.Axe-core автоматически проверяет наличие этих обязательных атрибутов и генерирует отчёты о пропущенных или некорректных элементах.
Подключение библиотеки осуществляется через npm:
import axe from 'axe-core';
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa', 'aria'] // включение проверок ARIA
}
}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
runOnly с тегом aria
позволяет сосредоточиться исключительно на ARIA-спецификациях.results.violations содержит массив
объектов, каждый из которых описывает конкретное нарушение, ссылку на
правило и рекомендации по исправлению.Неправильная роль Элемент использует роль,
несовместимую с его семантикой или отсутствующими событиями. Например,
<span role="checkbox"> без обработки клика и клавиш
Space/Enter.
Недостающий ARIA-атрибут У элемента с ролью
отсутствует обязательный ARIA-атрибут, например,
aria-checked для role="checkbox".
Конфликт ролей и нативной семантики Атрибут
role накладывается на элемент с уже определённой
семантикой, что приводит к противоречиям при чтении экранными
читалками.
Недоступные ARIA-связи
aria-labelledby или aria-describedby указывают
на несуществующий идентификатор, что делает описание
недоступным.
<button> вместо
<div role="button">. Это минимизирует необходимость
ручного управления ARIA-атрибутами.aria-labelledby или
aria-describedby, должны существовать и содержать
корректное описание.Динамическая таблица Таблица с изменяющимся
содержимым должна иметь корректные aria-live и
aria-relevant, чтобы экранные читалки уведомляли
пользователя о изменениях.
Модальные окна При открытии модального окна
Axe-core проверяет наличие role="dialog", фокусировки на
первом интерактивном элементе и корректного закрытия окна с возвратом
фокуса.
Компоненты с вкладками (tabs) Требуется
правильное использование ролей: tablist, tab,
tabpanel. Axe-core проверяет, что все вкладки доступны
через клавиатуру, активная вкладка отмечена
aria-selected="true", а содержимое вкладки связано через
aria-labelledby.
Axe-core предоставляет детализированные механизмы для проверки соответствия ARIA-спецификациям, выявления ошибок семантики, обязательных атрибутов и взаимодействия динамических компонентов. Применение библиотеки позволяет поддерживать высокие стандарты доступности и предотвращать критические нарушения, влияющие на пользователей с ограниченными возможностями.