Tippy.js — это мощная библиотека для создания всплывающих подсказок (tooltips) и небольших всплывающих элементов в веб-интерфейсе. Она построена поверх Popper.js, что обеспечивает гибкое позиционирование и поддержку сложных сценариев взаимодействия. Основное преимущество Tippy.js — простота интеграции с чистым JavaScript и современными фреймворками, такими как React, Vue или Angular.
Для начала работы с Tippy.js необходимо подключить библиотеку через npm или CDN:
// Через npm
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
// Через CDN
<script src="https://unpkg.com/@popperjs/core@2"></script>
<script src="https://unpkg.com/tippy.js@6"></script>
<link rel="stylesheet" href="https://unpkg.com/tippy.js@6/dist/tippy.css">
Инициализация подсказки осуществляется с помощью функции
tippy():
tippy('#myButton', {
content: 'Это подсказка',
});
В этом примере к элементу с id myButton прикрепляется
подсказка с текстом “Это подсказка”. Основной объект настройки
tippy принимает два параметра: селектор (или DOM-элемент) и
объект с опциями.
content — текст или HTML содержимое подсказки.placement — позиция относительно элемента
(top, bottom, left,
right, а также комбинации с -start и
-end).trigger — события, вызывающие подсказку
(mouseenter, click, focus,
manual).animation — анимация появления (fade,
scale, shift-away,
shift-toward).theme — возможность подключать кастомные темы через
CSS-классы.delay — задержка показа или скрытия подсказки в
миллисекундах.Пример с расширенными опциями:
tippy('#infoIcon', {
content: 'Дополнительная информация',
placement: 'right',
trigger: 'mouseenter focus',
animation: 'scale',
theme: 'light-border',
delay: [100, 200],
});
Tippy.js позволяет использовать не только текст, но и полноценное HTML-содержимое:
tippy('#profile', {
content: document.querySelector('#tooltipContent'),
allowHTML: true,
interactive: true,
});
Опция interactive: true позволяет пользователю
взаимодействовать с элементами внутри подсказки (например, кнопками или
ссылками).
Tippy.js предоставляет объект с методами для управления подсказкой:
show() — показать подсказку.hide() — скрыть подсказку.toggle() — переключить видимость.destroy() — полностью удалить подсказку.setContent(newContent) — изменить содержимое подсказки
на лету.Пример динамического обновления содержимого:
const instance = tippy('#dynamicButton', { content: 'Изначальный текст' });
document.querySelector('#updateButton').addEventListener('click', () => {
instance.setContent('Обновленный текст');
});
Tippy.js поддерживает кастомные темы через CSS. Библиотека
поставляется с базовыми темами light,
light-border, dark. Для создания своей
темы:
.tippy-box[data-theme~='custom'] {
background-color: #333;
color: #fff;
border-radius: 8px;
font-size: 14px;
padding: 10px;
}
.tippy-box[data-theme~='custom'][data-placement^='top'] > .tippy-arrow::before {
border-top-color: #333;
}
Привязка темы через Jav * aScript:
tippy('#customThemeButton', {
content: 'Подсказка с кастомной темой',
theme: 'custom',
});
Tippy.js поддерживает сложные сценарии через Popper.js, включая:
offset).flip,
preventOverflow).followCursor или sticky.Пример смещения и следования за курсором:
tippy('#followCursor', {
content: 'Я следую за курсором!',
followCursor: true,
offset: [0, 10],
placement: 'top',
});
Для динамически создаваемых элементов важно использовать
делегирование через tippy.delegate():
tippy.delegate(document.body, {
target: '.has-tooltip',
content(reference) {
return reference.getAttribute('data-tooltip');
},
placement: 'top',
animation: 'fade',
});
Такой подход автоматически обрабатывает новые элементы, появляющиеся в DOM после загрузки страницы.
Tippy.js имеет официальные адаптеры для React, Vue и других фреймворков. Основной принцип — передача ref или селектора элемента и управление подсказками через state. В React, например:
import Tippy from '@tippyjs/react';
import 'tippy.js/dist/tippy.css';
<Tippy content="Подсказка на кнопке" placement="bottom">
<button>Нажми меня</button>
</Tippy>
lazy загрузку контента при
необходимости.Tippy.js предоставляет комплексный и гибкий инструмент для работы с подсказками и всплывающими элементами, позволяя легко настраивать поведение, внешний вид и динамическое взаимодействие с пользователем. С правильной организацией кода и применением опций можно создавать как простые текстовые подсказки, так и сложные интерактивные интерфейсы.