Заказ DOM имеет значение

Важность порядка DOM по умолчанию

Дэйв Гаш
Dave Gash
Меггин Кирни
Meggin Kearney

Работа с собственными элементами — отличный способ изучить поведение фокуса, поскольку они автоматически вставляются в порядок табуляции в зависимости от их положения в DOM.

Например, у вас может быть три элемента «кнопка», расположенных в DOM один за другим. Нажатие клавиши Tab по порядку фокусирует на каждой кнопке. Попробуйте щёлкнуть по блоку кода ниже, чтобы переместить начальную точку навигации, а затем нажмите клавишу Tab , чтобы переместить фокус между кнопками.

<button>I Should</button>
<button>Be Focused</button>
<button>Last!</button>

Однако важно отметить, что с помощью CSS можно добиться того, чтобы элементы существовали в DOM в одном порядке, а на экране отображались в другом. Например, если использовать свойство CSS, например, float для перемещения одной кнопки вправо, кнопки будут отображаться на экране в другом порядке. Но поскольку их порядок в DOM остаётся прежним, сохраняется и порядок их нажатия. Когда пользователь перемещается по странице, кнопки получают фокус в неинтуитивном порядке. Попробуйте щёлкнуть по блоку кода ниже, чтобы переместить начальную точку навигации фокуса, а затем нажмите клавишу Tab , чтобы переместить фокус между кнопками.

<button style="float: right">I Should</button>
<button>Be Focused</button>
<button>Last!</button>

Будьте осторожны при изменении визуального положения элементов на экране с помощью CSS. Это может привести к тому, что порядок табуляции будет смещаться, кажущимся хаотичным, что сбивает с толку пользователей, использующих клавиатуру. Поэтому в разделе 1.3.2 контрольного списка Web AIM указано, что порядок чтения и навигации, определяемый порядком кода, должен быть логичным и интуитивно понятным.

Старайтесь как можно чаще переходить между страницами, просто чтобы убедиться, что вы случайно не перепутали порядок вкладок. Это хорошая привычка, которая не требует особых усилий.

Закадровый контент

Что делать, если у вас есть контент, который в данный момент не отображается, но всё же должен быть в DOM, например, адаптивная боковая навигация? Когда у вас есть подобные элементы, получающие фокус, находясь за пределами экрана, может показаться, что фокус исчезает и снова появляется, когда пользователь перемещается по странице, — что, безусловно, нежелательно. В идеале следует запретить панели получать фокус, когда она находится за пределами экрана, и разрешать ей получать фокус только тогда, когда пользователь может с ней взаимодействовать.

Выдвижная панель за пределами экрана может отвлекать внимание.

Иногда приходится провести небольшое расследование, чтобы выяснить, куда ушёл фокус. Вы можете использовать document.activeElement в консоли, чтобы узнать, какой элемент в данный момент находится в фокусе.

Узнав, какой элемент за пределами экрана находится в фокусе, вы можете задать для него значение display: none или visibility: hidden , а затем снова задать ему значение display: block или visibility: visible прежде чем показывать его пользователю.

Выдвижная панель, не отображающая ничего.
Выдвижная панель для отображения блока.

В целом, мы рекомендуем разработчикам просматривать свои сайты с помощью Tab перед каждой публикацией, чтобы убедиться, что порядок вкладок не исчезает и не нарушает логическую последовательность. Если это происходит, следует убедиться, что вы правильно скрываете закадровый контент с помощью display: none или visibility: hidden , или изменить физическое расположение элементов в DOM, чтобы они находились в логическом порядке.