Библиотека Tippy.js предоставляет мощные возможности для создания всплывающих подсказок и тултипов, однако при разработке важно учитывать доступность интерфейсов согласно стандарту WCAG (Web Content Accessibility Guidelines). Доступность влияет на пользователей с ограниченными возможностями, включая людей с нарушениями зрения, моторики или когнитивных функций.
Tippy.js полностью поддерживает использование ARIA-атрибутов, которые необходимы для соблюдения стандартов WCAG. Ключевые атрибуты:
aria-describedby – связывает элемент с соответствующей
подсказкой. Tippy.js автоматически добавляет этот атрибут при указании
опции aria: 'describedby'.role="tooltip" – указывает на элемент как на тултип,
чтобы вспомогательные технологии распознавали его назначение.aria-hidden – используется для скрытия тултипов, когда
они не видимы, предотвращая их озвучивание скринридерами.Пример создания тултипа с корректной ARIA-разметкой:
tippy('#button', {
content: 'Сохранить изменения',
aria: 'describedby', // автоматически добавляет aria-describedby
role: 'tooltip',
});
В этом примере #button получает атрибут
aria-describedby, указывающий на ID элемента тултипа. При
навигации с помощью скринридера пользователь узнает о наличии
дополнительной информации.
WCAG требует, чтобы интерактивные элементы были доступными с клавиатуры. Tippy.js обеспечивает это через триггеры событий:
mouseenter и mouseleave – для мыши.focus и blur – для клавиатуры и
скринридеров.Пример комбинированного триггера для полной доступности:
tippy('#input', {
content: 'Введите ваше имя',
trigger: 'mouseenter focus',
});
Использование focus гарантирует, что подсказка
появляется, когда элемент получает клавиатурный фокус, что важно для
пользователей, которые не используют мышь.
Согласно WCAG, пользователю должно быть достаточно времени для прочтения содержимого подсказки. В Tippy.js можно управлять задержкой показа и скрытия через параметры:
tippy('#icon', {
content: 'Подсказка с задержкой',
delay: [300, 500], // 300 мс перед появлением, 500 мс перед скрытием
});
Визуальная доступность влияет на контрастность текста и фона. Tippy.js поддерживает кастомные темы, которые можно настроить с учетом стандартов WCAG для контраста не менее 4.5:1 для текста обычного размера:
tippy('#link', {
content: 'Дополнительная информация',
theme: 'accessible',
});
tippy.setDefaultProps({
theme: 'accessible',
});
Стили темы accessible могут включать яркий контраст
текста и фона, крупный шрифт, достаточные отступы, чтобы улучшить
читаемость.
Tippy.js позволяет создавать интерактивные подсказки, которые содержат кнопки, ссылки или формы. Для соответствия WCAG важно:
interactive: true для предотвращения
закрытия тултипа при наведении курсора на его содержимое.Пример интерактивного тултипа:
tippy('#menu', {
content: '<button id="action">Действие</button>',
allowHTML: true,
interactive: true,
});
Скринридеры и клавиатура смогут корректно взаимодействовать с содержимым тултипа, а Tippy.js сохранит контроль над его видимостью.
Если требуется показать визуальный тултип без озвучивания, можно использовать:
tippy('#icon', {
content: 'Всплывающая подсказка только для визуального восприятия',
aria: 'off',
});
Опция aria: 'off' отключает автоматическое добавление
ARIA-атрибутов, что соответствует практике скрытия информации, не
предназначенной для вспомогательных технологий.
WCAG указывает, что анимации не должны вызывать дискомфорт. В Tippy.js анимации на появление и скрытие можно настраивать:
tippy('#avatar', {
content: 'Профиль пользователя',
animation: 'shift-away', // мягкая анимация
duration: [200, 200],
});
aria-describedby и
role="tooltip" для вспомогательных технологий.focus и
blur.interactive: true и
корректно управлять фокусом.Tippy.js предоставляет полный инструментарий для создания доступных тултипов, соблюдающих стандарты WCAG, при правильной настройке атрибутов, триггеров, стилей и анимаций.