Tippy.js позволяет создавать интерактивные всплывающие подсказки с высокой степенью кастомизации. Одним из мощных инструментов является поддержка шаблонов. Шаблон в Tippy.js — это HTML-структура, которая определяет содержимое и оформление подсказки. Использование шаблонов позволяет создавать сложные подсказки с изображениями, кнопками, списками и любой другой разметкой.
Самый простой способ использовать шаблон — это подготовить
HTML-элемент, который будет служить содержимым подсказки. Обычно это
<div> с уникальным идентификатором:
<div id="tooltip-template" style="display: none;">
<h3>Заголовок подсказки</h3>
<p>Описание или дополнительная информация.</p>
<button class="tooltip-action">Действие</button>
</div>
<button id="my-button">Наведи на меня</button>
Подключение шаблона к Tippy.js производится с помощью опции
content и функции document.querySelector:
tippy('#my-button', {
content: document.querySelector('#tooltip-template').innerHTML,
allowHTML: true,
interactive: true,
placement: 'right'
});
Ключевые моменты:
allowHTML: true — разрешает интерпретацию HTML внутри
подсказки.interactive: true — позволяет взаимодействовать с
элементами внутри подсказки, например, нажимать кнопки или выделять
текст.placement — определяет позицию всплывающей подсказки
относительно элемента.Для динамического создания содержимого можно передавать функцию в
опцию content. Функция возвращает HTML-код или DOM-элемент.
Это особенно удобно, если содержимое подсказки зависит от состояния
приложения или данных:
tippy('#my-button', {
content(reference) {
const userName = reference.getAttribute('data-user');
return `<div>
<strong>${userName}</strong>
<p>Подробная информация о пользователе</p>
</div>`;
},
allowHTML: true,
interactive: true
});
Особенности функции-шаблона:
reference — это элемент, к которому привязана
подсказка.data-*) для генерации уникального содержимого.document.createElement.Tippy.js отлично интегрируется с фреймворками вроде React, Vue и
Svelte. Для этих случаев можно использовать готовые компоненты в
качестве шаблона. Например, в чистом JavaScript можно создать DOM-узел и
передать его в content:
const tooltipNode = document.createElement('div');
tooltipNode.innerHTML = `
<h4>Компонентная подсказка</h4>
<ul>
<li>Пункт 1</li>
<li>Пункт 2</li>
</ul>
`;
tippy('#my-button', {
content: tooltipNode,
interactive: true,
});
Преимущества передачи DOM-узла:
Для индивидуального оформления подсказки можно использовать опцию
theme или полностью управлять CSS-классами:
tippy('#my-button', {
content: document.querySelector('#tooltip-template').innerHTML,
allowHTML: true,
interactive: true,
theme: 'custom-theme'
});
CSS:
.tippy-box[data-theme~='custom-theme'] {
background-color: #333;
color: #fff;
border-radius: 8px;
padding: 15px;
font-family: 'Arial', sans-serif;
}
.tippy-box[data-theme~='custom-theme'] h3 {
margin-top: 0;
font-size: 16px;
}
Советы по стилям:
Tippy.js позволяет менять содержимое подсказки после инициализации с
помощью метода setContent:
const instance = tippy('#my-button', {
content: '<p>Первоначальное содержимое</p>',
allowHTML: true
});
document.querySelector('#my-button').addEventListener('click', () => {
instance[0].setContent('<p>Обновленное содержимое после клика</p>');
});
Преимущества метода setContent:
innerHTML
скрытого элемента.allowHTML: true при работе с
HTML-разметкой.Шаблоны в Tippy.js открывают широкие возможности для кастомизации интерфейса, позволяя создавать интерактивные, визуально насыщенные и динамические всплывающие подсказки.