tabindexАтрибут tabindex определяет порядок навигации по
элементам страницы с помощью клавиши Tab. Элементы с
положительным tabindex получают приоритет
при перемещении фокуса перед элементами с tabindex="0" и
естественными фокусируемыми элементами (<a>,
<button>, <input> и т.д.).
tabindex="1" – элемент получает фокус
первым.tabindex="2" – следующий по
приоритету.Важно учитывать, что положительные значения следует использовать ограниченно, так как слишком сложная нумерация приводит к трудностям в управлении фокусом.
Библиотека Tabbable используется для поиска всех
фокусируемых элементов внутри контейнера, учитывая их
tabindex. Она обеспечивает корректную навигацию и
позволяет:
display: none, visibility: hidden,
disabled).tabindex.Пример использования:
import tabbable from 'tabbable';
const container = document.getElementById('form-container');
const focusableElements = tabbable(container);
console.log(focusableElements);
В массиве focusableElements элементы будут
отсортированы сначала по положительному
tabindex, затем по tabindex="0", и в
конце — по естественному порядку DOM.
tabindexПриоритет положительных значений Элементы с
tabindex > 0 всегда получают фокус
раньше, даже если они находятся ниже в DOM. Например,
<button tabindex="3"> может быть фокусирован раньше
<input tabindex="0">.
Цифровой порядок важен Если несколько элементов
имеют положительный tabindex, библиотека Tabbable
возвращает их от меньшего к большему.
<input id="a" tabindex="2">
<input id="b" tabindex="1">
<input id="c" tabindex="3">
const elems = tabbable(document.body);
console.log(elems.map(e => e.id)); // ['b', 'a', 'c']
tabindex получают индекс 0 и
располагаются после всех положительных.Библиотека позволяет легко реализовать кастомную навигацию:
const focusNext = (current) => {
const elements = tabbable(container);
const index = elements.indexOf(current);
const nextIndex = (index + 1) % elements.length;
elements[nextIndex].focus();
};
tabindex.tabindextabindex легко нарушить порядок
фокуса.tabindex="0"
предпочтительнее для большинства интерфейсов.Оптимальная практика — использовать положительные значения
только для критических элементов, которые должны быть
доступны первыми, а для остальных — 0 или отсутствие
атрибута.
В интерактивных компонентах (модальные окна, аккордеоны) библиотека
Tabbable в сочетании с положительными tabindex
позволяет:
Пример для модального окна:
const modal = document.getElementById('modal');
const firstElement = tabbable(modal)[0];
firstElement.focus(); // Начальный фокус на элемент с наименьшим положительным tabindex
Положительные значения tabindex дают полный контроль над
порядком навигации, а библиотека Tabbable обеспечивает:
tabindex.Использование этой комбинации позволяет создавать сложные и доступные веб-интерфейсы с точной настройкой порядка фокуса.