Иногда необходимо сделать нефокусируемые элементы доступными для чтения с экрана.
Пример: при создании ссылок перехода, таких как <a href="#target">Skip to content</a>
, которые переходят на ID, важно, чтобы конкретный элемент также получал фокус, поэтому не только область просмотра прокручивается до элемента, но и фокус устанавливается там. В противном случае пользователь, использующий только клавиатуру, «перепрыгнет» обратно к началу документа, как только он попытается перейти к следующему элементу (ожидая, что табуляция начнется с объекта #target
).
Здесь нужен tabindex="0"
, который работает как положено. Не очень приятно то, что в других случаях использования (например, при переходе по всей странице) это раздражает (обычно вы не хотите фокусироваться на элементах, не доступных для фокусировки).
Обходной путь может быть таким: создать javascript, который при загрузке страницы...
- сканирует весь документ на наличие ссылок, которые нацелены на идентификатор
- adds a call to a function
addVolatileTabindex
to each of those links on activation- when the link is activated,
addVolatileTabindex
adds atabindex="0"
to the targeted element, then focuses it - он также добавляет вызов
removeVolatileTabindex
, когда фокус теряется с целевого элемента - когда вызывается
removeVolatileTabindex
,tabindex="0"
снова удаляется
- when the link is activated,
Таким образом, tabindex="0"
есть только тогда, когда он действительно нужен, а в противном случае его нет.
Возможно, для этого уже существует решение? Или есть другие способы добиться этого?