Tippy.js — это современная библиотека для создания всплывающих подсказок (tooltip) на элементах DOM. Она построена на основе Popper.js, что обеспечивает точное позиционирование и гибкость в настройках. Основное преимущество Tippy.js заключается в простоте интеграции с любыми веб-приложениями и поддержке различных триггеров, анимаций и интерактивных подсказок.
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
tippy('.button', {
content: 'Пример подсказки',
});
В этом примере создается простая подсказка для всех элементов с
классом button. Параметр content определяет
текст или HTML-содержимое подсказки.
Tippy.js позволяет управлять событиями, которые вызывают отображение подсказки. Основные триггеры:
mouseenter — стандартное появление при наведении
курсора.click — отображение по клику.focus — для элементов форм, отображение при
фокусе.manual — ручное управление через методы API.tippy('.input', {
content: 'Введите значение',
trigger: 'focus',
});
Использование manual позволяет полностью контролировать
открытие и закрытие подсказок через методы show(),
hide() и destroy().
Tippy.js использует Popper.js для управления положением подсказки
относительно целевого элемента. Позиции можно задавать через параметр
placement:
top, bottom, left,
right — стандартные позиции.top-start, top-end и аналогичные —
уточнение выравнивания.flip и
offset.tippy('.icon', {
content: 'Информация',
placement: 'right-start',
offset: [0, 10],
});
Параметр offset позволяет смещать подсказку относительно
исходного положения, что удобно для сложных интерфейсов.
Tippy.js поддерживает встроенные анимации (fade,
scale, shift-away) и позволяет подключать
собственные CSS-классы для кастомного оформления.
tippy('.tooltip', {
content: 'Анимированная подсказка',
animation: 'scale',
theme: 'light-border',
});
Можно создавать собственные темы через CSS:
.tippy-box[data-theme~='custom'] {
background-color: #333;
color: #fff;
border-radius: 6px;
padding: 8px 12px;
}
tippy('.custom-tooltip', {
content: 'Кастомная тема',
theme: 'custom',
});
Для создания интерактивных элементов внутри подсказки используется
параметр interactive: true. Это позволяет размещать кнопки,
ссылки или формы внутри всплывающей подсказки.
tippy('.menu', {
content: '<button>Нажми меня</button>',
allowHTML: true,
interactive: true,
});
Параметр allowHTML: true разрешает использование
HTML-контента внутри подсказки. При этом важно помнить о безопасности и
фильтровать внешние данные.
Tippy.js предоставляет API для управления подсказками после их создания:
show() — показать подсказку.hide() — скрыть подсказку.destroy() — полностью удалить подсказку.setContent(newContent) — изменить содержимое на
лету.const tip = tippy('#dynamic', { content: 'Изначальный текст' });
tip[0].setContent('Обновленный текст');
tip[0].show();
Для элементов, которые создаются динамически, используется
делегирование через параметр delegate:
tippy(document.body, {
content: 'Подсказка для кнопки',
delegate: '.dynamic-button',
});
Подсказка будет работать для всех элементов с классом
dynamic-button, даже если они добавлены после инициализации
Tippy.js.
Tippy.js поддерживает задержку появления (delay) и
продолжительность анимации (duration):
tippy('.delayed', {
content: 'Подсказка с задержкой',
delay: [500, 200], // [появление, скрытие] в миллисекундах
duration: [300, 200], // анимация появления/скрытия
});
Это позволяет гибко настраивать UX, особенно для интерактивных интерфейсов.
Tippy.js легко интегрируется с React, Vue и Angular. В React,
например, используется компонент Tippy:
import Tippy from '@tippyjs/react';
import 'tippy.js/dist/tippy.css';
<Tippy content="Подсказка в React">
<button>Наведи меня</button>
</Tippy>
Аналогичные подходы доступны для Vue и Angular через соответствующие адаптеры.
Tippy.js позволяет подставлять динамический контент через функции:
tippy('.user', {
content(reference) {
return `Имя пользователя: ${reference.dataset.username}`;
},
});
Это особенно полезно для систем с интерактивными данными и локализованными подсказками.
Tippy.js сочетает простоту API с гибкостью и мощным функционалом позиционирования. Его возможности охватывают статические и динамические интерфейсы, поддерживают HTML-контент, интерактивность, анимации и интеграцию с современными фреймворками. Такой подход позволяет создавать аккуратные и настраиваемые всплывающие подсказки в любом веб-приложении.