Tippy.js предоставляет богатый функционал для управления всплывающими подсказками и тултипами, включая поддержку клавиатурной навигации. Это критически важно для доступности веб-приложений (Accessibility, A11y), когда пользователи взаимодействуют с интерфейсом исключительно через клавиатуру.
По умолчанию Tippy.js привязывает всплывающую подсказку к
определённому DOM-элементу. Чтобы тултип появлялся при фокусе с
клавиатуры, необходимо использовать опцию
trigger: 'focus':
tippy('#button', {
content: 'Подсказка при фокусе',
trigger: 'focus',
});
trigger: 'focus' — позволяет всплывать тултипу при
переходе на элемент через Tab.'mouseenter focus', если нужна поддержка как мыши, так и
клавиатуры.Tippy.js поддерживает интерактивные тултипы, внутри которых пользователь может перемещаться с помощью клавиатуры:
tippy('#menu', {
content: '<button>Кнопка 1</button><button>Кнопка 2</button>',
allowHTML: true,
interactive: true,
trigger: 'click',
});
interactive: true — позволяет удерживать тултип
открытым при взаимодействии с его содержимым.Для кастомного управления тултипами можно использовать методы экземпляра Tippy.js:
const instance = tippy('#icon', {
content: 'Интерактивная подсказка',
});
const button = document.querySelector('#open-tooltip');
button.addEventListener('keydown', (e) => {
if (e.key === 'Enter' || e.key === ' ') {
instance.show();
}
if (e.key === 'Escape') {
instance.hide();
}
});
instance.show() и instance.hide()
позволяют полностью контролировать видимость через
Enter, Space и
Escape.При наличии нескольких интерактивных тултипов важно поддерживать корректную навигацию:
tabindex="0" на кнопках или ссылках, чтобы их можно было
достигнуть с клавиатуры.Пример:
<div id="tooltip-container" tabindex="0">
<button>Опция 1</button>
<button>Опция 2</button>
</div>
tippy('#trigger', {
content: document.querySelector('#tooltip-container'),
interactive: true,
});
tabindex="0" на контейнер позволяет
удерживать фокус внутри тултипа.focus-trap для более
сложной логики, когда фокус не должен покидать тултип до закрытия.Для сложных UI-компонентов можно назначать клавиши навигации для открытия тултипов, переключения между их элементами и закрытия:
document.addEventListener('keydown', (e) => {
switch(e.key) {
case 'ArrowDown':
// Переместить фокус на следующий элемент в тултипе
break;
case 'ArrowUp':
// Переместить фокус на предыдущий элемент
break;
case 'Escape':
// Закрыть тултип
instance.hide();
break;
}
});
Для корректной работы клавиатурной навигации необходимо использовать ARIA-атрибуты:
tippy('#info', {
content: 'Информация о кнопке',
trigger: 'focus',
aria: {
content: 'describedby',
},
});
aria: { content: 'describedby' } автоматически
связывает тултип с элементом.trigger: 'focus' для появления подсказки
при фокусе.interactive: true для интерактивных элементов
внутри тултипа.show()
и hide().tabindex и обработку Tab/Shift+Tab.Правильная комбинация этих техник позволяет создавать доступные и управляемые с клавиатуры тултипы в любом веб-приложении с Tippy.js.