Библиотека Tabbable предназначена для определения
элементов на веб-странице, которые могут получать фокус с помощью
клавиши Tab. Основной задачей является получение списка
интерактивных элементов в естественном порядке
табуляции, учитывая видимость, атрибуты и стандартные правила
HTML.
Функциональность библиотеки сосредоточена на двух ключевых методах:
tabbable(element) — возвращает массив
элементов, доступных для фокусировки с клавиатуры в порядке
табуляции.isTabbable(element, options) —
проверяет, является ли конкретный элемент доступным для фокуса, учитывая
дополнительные параметры.Порядок, в котором элементы получают фокус при нажатии клавиши
Tab, определяется следующими правилами:
Порядок документа Элементы обрабатываются по их расположению в DOM, сверху вниз и слева направо.
Атрибут tabindex
tabindex="0" — элемент включен в естественный поток
табуляции.tabindex="-1" — элемент исключен из потока табуляции,
но может быть сфокусирован программно.tabindex="1", 2 и
т.д.) приоритизируют элементы выше естественного порядка. Элементы с
одинаковым положительным значением сортируются по DOM.Скрытые или неактивные элементы
display: none или
visibility: hidden исключаются.disabled не учитываются в табуляции.Семантическая интерактивность Только элементы,
по стандартам HTML интерактивные (a[href],
button, input, select,
textarea), автоматически включаются в поток
табуляции.
tabbableimport tabbable from "tabbable";
const container = document.getElementById("form-section");
const focusableElements = tabbable(container);
console.log(focusableElements);
В результате получается массив DOM-элементов в том порядке, в котором
они будут получать фокус при нажатии клавиши Tab. Это
удобно для:
Метод tabbable поддерживает опции:
includeContainer — если
true, сам контейнер проверяется на tabbable.getShadowRoot — функция, позволяющая
учитывать элементы внутри Shadow DOM.includeDisabled — включает элементы с
атрибутом disabled в результат, если это необходимо для
специфической логики.Пример использования с фильтром:
const focusableWithDisabled = tabbable(container, {
includeDisabled: true
});
Для компонентов с вложенными контейнерами порядок табуляции строится рекурсивно. Библиотека учитывает:
getShadowRoot.tabindex.Это гарантирует, что клавиатурная навигация всегда соответствует визуальной иерархии.
Стандартный браузерный
document.querySelectorAll('input, button, a') не
учитывает:
display: none и
visibility: hidden).tabindex, включая отрицательные и
положительные.Библиотека Tabbable решает эти ограничения, предоставляя точный и предсказуемый порядок фокусировки.
Модальные окна Ограничение фокуса внутри модального контента для предотвращения ухода на фоновые элементы.
Кастомные виджеты Построение компонентов, где последовательность табуляции не совпадает с DOM, но должна быть логичной для пользователей клавиатуры.
Тестирование доступности Проверка интерфейсов на корректный порядок навигации с клавиатуры, особенно при динамическом добавлении или удалении элементов.
tabindex; библиотека
учитывает все нюансы DOM.focus-trap или кастомными обработчиками
можно реализовать полноценную клавиатурную навигацию без конфликтов с
браузером.Использование Tabbable обеспечивает надежное управление фокусом и делает интерфейсы более доступными, соответствующими стандартам WAI-ARIA и рекомендациям по доступности.