Контроль и автоматизация (a11y)
В данном разделе описаны процедуры контроля доступности в процессе разработки и инструменты для автоматической проверки.
Инструменты для проверки a11y
MUST
- ESLint:
eslint-plugin-jsx-a11yвключён и не игнорируется без причины- Рекомендуемый пресет:
plugin:jsx-a11y/recommended
- Рекомендуемый пресет:
- Любое отключение правила — с комментарием почему или ссылкой на проблему (issue)
SHOULD
Runtime-проверки:
@axe-core/react — проверяет accessibility tree отрендеренной страницы в процессе разработки.
Что проверяет (не видно при статическом анализе):
- Контраст текста (computed styles, включая фон через псевдоэлементы)
- Структуру заголовков (порядок, пустые заголовки, наличие h1)
- Валидность ARIA (роли, атрибуты, обязательные свойства, вложенность)
- Корректность landmarks (main, banner, contentinfo)
- Наличие
langатрибута на<html> - Дублирование
id(ломаетaria-labelledby/describedby)
Пример конфигурации:
// _app.tsx или main.tsx
if (process.env.NODE_ENV !== 'production') {
import('@axe-core/react').then((axe) => {
axe.default(React, ReactDOM, 1000);
});
}
Процедуры контроля (Code Review)
Ревьюер обязан проверить
- ✅ Корректность семантики HTML (button vs a, наличие label)
- ✅ Доступность интерактивных элементов с клавиатуры
- ✅ Наличие label у полей форм
- ✅
altописывает смысл, а не внешний вид изображения - ✅ Контент в
::before/::after— только декоративный - ✅ Кастомизация компонентов UI-библиотеки не сломала a11y
Автоматизация
ESLint:
{
"extends": ["plugin:jsx-a11y/recommended"],
"rules": {
"jsx-a11y/no-autofocus": "warn",
"jsx-a11y/alt-text": "error"
}
}