Навигация с клавиатуры является ключевым аспектом доступности веб-приложений. Lighthouse в JavaScript предоставляет мощный инструмент для анализа и оценки качества реализации этой функциональности. Он проверяет, насколько веб-страница поддерживает управление с клавиатуры, выявляет потенциальные проблемы и предлагает рекомендации по их исправлению.
1. Фокусируемость элементов Lighthouse анализирует,
какие элементы страницы могут получать фокус. Проверяется наличие
атрибута tabindex, правильная последовательность элементов,
а также возможность взаимодействия с элементами формы и интерактивными
компонентами.
tabindex="0" – элемент включен в естественную
последовательность фокуса.tabindex="-1" – элемент можно программно сфокусировать,
но он не включен в последовательность при нажатии Tab.tabindex="1" и выше – устаревшая практика, нарушающая
естественный порядок фокуса.2. Видимость фокуса Элементы, которые могут получать
фокус, должны иметь визуальное выделение при активном фокусе. Lighthouse
проверяет наличие CSS-стилей для состояния :focus и
сигнализирует о проблемах, когда фокус невидим. Это критично для
пользователей, использующих клавиатуру или вспомогательные
технологии.
3. Последовательность фокуса Lighthouse оценивает логическую последовательность перехода по элементам страницы с помощью клавиши Tab. Нарушение естественного порядка фокуса снижает удобство навигации, делает взаимодействие с формами и меню хаотичным и может привести к потере контекста пользователем.
Lighthouse отдельно тестирует интерактивные элементы, такие как кнопки, ссылки, чекбоксы, поля ввода. Критерии проверки включают:
Если элемент интерактивен, но не может быть активирован с клавиатуры, Lighthouse помечает это как блокирующую проблему.
Для автоматической проверки навигации с клавиатуры Lighthouse предоставляет API, доступное в Node.js:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
(async () => {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
const options = {port: chrome.port, onlyCategories: ['accessibility']};
const runnerResult = await lighthouse('https://example.com', options);
const audits = runnerResult.lhr.audits;
console.log('Клавиатурная доступность:');
console.log(audits['keyboard']).log;
await chrome.kill();
})();
Этот пример запускает Lighthouse в режиме accessibility
и выводит детальный отчет по проблемам с навигацией с клавиатуры,
включая элементы без фокусировки, неправильный порядок фокуса и
отсутствующие состояния :focus.
outline или другие CSS-стили для состояния
:focus.tabindex:
избегать положительных значений, поддерживать естественную
последовательность.role="button",
aria-label и другие позволяют правильно обозначить элементы
для вспомогательных технологий.Lighthouse оценивает клавиатурную доступность по шкале от 0 до 100. В отчете выделяются:
Pass – элемент полностью доступен для клавиатуры.Fail – элемент не доступен для клавиатуры.Not Applicable – элемент не интерактивен и проверка не
требуется.Дополнительно предоставляются рекомендации по исправлению проблем с конкретными селекторами и указанием места на странице, где нарушена доступность.
Регулярное использование Lighthouse для анализа клавиатурной доступности позволяет:
Встроенные аудиты Lighthouse легко интегрируются в CI/CD пайплайны, что обеспечивает автоматическое отслеживание изменений и предотвращение регрессий в клавиатурной доступности.