Атрибут tabindex тега <audio>
Описание
Атрибут tabindex определяет, может ли элемент <audio> получать фокус при навигации по странице с помощью клавиши Tab, и в каком порядке.
<audio controls tabindex="0">
<source src="audio.mp3" type="audio/mpeg">
</audio>
Значения атрибута:
| Значение | Поведение | Рекомендации |
|---|---|---|
0 |
Включает элемент в естественный поток навигации | ✓ Для доступных плееров |
-1 |
Позволяет фокусироваться программно, но не через Tab | Для фоновых аудио |
> 0 |
Задает кастомный порядок (не рекомендуется) | ❌ Избегать |
| (отсутствует) | Зависит от наличия controls | По умолчанию |
Особенности для <audio>:
- Без
controlsэлемент не фокусируется - С
controlsобычно фокусируемый по умолчанию - Положительные значения нарушают логический порядок
- Фокус позволяет управлять с клавиатуры (пробел для play/pause)
<audio
controls
tabindex="0"
aria-label="Аудио подкаст о технологиях"
>
<source src="podcast.mp3" type="audio/mpeg">
</audio>
JavaScript управление фокусом:
const audio = document.querySelector('audio');
// Программная фокусировка
audio.focus();
// Проверка поддержки
console.log('Поддержка tabindex:', 'tabIndex' in audio);
Лучшие практики:
- Используйте
tabindex="0"для интерактивных плееров - Избегайте положительных значений (нарушают доступность)
- Сочетайте с ARIA-атрибутами
- Тестируйте навигацию только с клавиатуры
Важно: Использование tabindex > 0 считается антипаттерном доступности и нарушает естественный поток документа.
Проверка порядка фокуса:
// Получить все фокусируемые элементы
const focusable = Array.from(document.querySelectorAll(
'a[href], button, input, select, textarea, audio[controls], [tabindex]'
)).filter(el => el.tabIndex >= 0);
console.log('Порядок фокуса:', focusable);
Совет: Для кастомных аудио-контролов назначайте tabindex отдельным интерактивным элементам (кнопкам, слайдерам).
Примечание: В большинстве современных браузеров <audio controls> фокусируем по умолчанию без явного указания tabindex.