Для начала работы с Tippy.js необходимо подключить
библиотеку к проекту. Существует два основных способа: через CDN и через
пакетный менеджер npm или yarn.
Подключение через CDN:
<link rel="stylesheet" href="https://unpkg.com/tippy.js@6/dist/tippy.css">
<script src="https://unpkg.com/@popperjs/core@2"></script>
<script src="https://unpkg.com/tippy.js@6"></script>
Подключение через npm:
npm install tippy.js @popperjs/core
После подключения библиотеки можно создавать простые тултипы:
tippy('.button', {
content: 'Нажмите здесь, чтобы продолжить',
});
Здесь .button — селектор элемента, к которому
привязывается тултип, а content задаёт текст подсказки.
Tippy.js предоставляет гибкую настройку поведения и внешнего вида тултипов. Наиболее важные опции:
content — текст или HTML-контент тултипа.placement — позиция тултипа относительно целевого
элемента: top, bottom, left,
right, а также их вариации (top-start,
bottom-end).trigger — событие, которое вызывает тултип:
mouseenter, click, focus,
manual.animation — анимация появления/скрытия:
fade, scale, shift-away,
perspective.delay — задержка в миллисекундах перед
показом/скрытием.interactive — если true, тултип остаётся
открытым при наведении мыши на него.theme — возможность создания кастомных стилей через
CSS-классы.Пример с дополнительными настройками:
tippy('.button', {
content: 'Нажмите для продолжения',
placement: 'bottom',
animation: 'scale',
delay: [200, 100],
interactive: true,
theme: 'light',
});
Tippy.js поддерживает не только текст, но и полноценный HTML-контент.
Для этого используется опция allowHTML:
tippy('.info', {
content: '<strong>Важно:</strong> следуйте инструкциям',
allowHTML: true,
placement: 'right',
});
Можно вставлять сложные элементы, например формы или кнопки:
tippy('.menu-item', {
content: document.querySelector('#tooltip-template').innerHTML,
allowHTML: true,
interactive: true,
});
Где #tooltip-template — скрытый блок с
HTML-контентом:
<div id="tooltip-template" style="display: none;">
<p>Выберите опцию:</p>
<button>Подтвердить</button>
</div>
Tippy.js идеально подходит для пошаговых инструкций в интерфейсе. Для организации тура:
const tourSteps = [
{ selector: '.step1', content: 'Это главное меню', placement: 'bottom' },
{ selector: '.step2', content: 'Здесь можно редактировать профиль', placement: 'right' },
{ selector: '.step3', content: 'Не забудьте сохранить изменения', placement: 'top' },
];
let currentStep = 0;
let tippyInstance;
function showStep(stepIndex) {
if (tippyInstance) tippyInstance.destroy();
const step = tourSteps[stepIndex];
const element = document.querySelector(step.selector);
tippyInstance = tippy(element, {
content: step.content,
placement: step.placement,
showOnCreate: true,
interactive: true,
hideOnClick: false,
});
tippyInstance.show();
}
document.querySelector('#next').addEventListener('click', () => {
currentStep++;
if (currentStep < tourSteps.length) {
showStep(currentStep);
} else {
tippyInstance.destroy();
}
});
Такой подход позволяет создавать поэтапные туры, которые сопровождают пользователя через интерфейс, не перегружая его информацией.
Tippy.js поддерживает кастомные темы через CSS. Пример создания темы для тура:
.tippy-box[data-theme~='onboarding'] {
background-color: #ffffff;
color: #333;
border: 2px solid #007bff;
border-radius: 8px;
font-size: 14px;
padding: 10px 15px;
}
.tippy-box[data-theme~='onboarding'][data-placement^='top'] > .tippy-arrow {
color: #007bff;
}
И применение:
tippy('.step1', {
content: 'Начало тура',
theme: 'onboarding',
placement: 'bottom',
});
onShow, onHide, onCreate, которые
позволяют отслеживать и управлять состоянием тура:tippy('.step1', {
content: 'Проверка событий',
onShow(instance) { console.log('Показан шаг 1'); },
onHide(instance) { console.log('Скрыт шаг 1'); },
});
tippy.delegate(document.body, {
target: '.dynamic-button',
content: 'Динамический элемент',
});
interactive: true для элементов, требующих
взаимодействия.delay, чтобы тултипы не мелькали при
быстром наведении.Tippy.js сочетает простоту настройки с высокой гибкостью, что делает его оптимальным инструментом для создания пошаговых туров и эффективного onboarding.