Tippy.js позволяет создавать гибкие и кастомизируемые тултипы,
которые могут содержать не только текст, но и полноценный HTML-контент.
Использование HTML открывает возможность добавлять сложные структуры,
кнопки, изображения и даже интерактивные элементы внутрь тултипа. Для
этого необходимо правильно настраивать опцию allowHTML и
передавать содержимое через свойство content.
По умолчанию Tippy.js обрабатывает содержимое как простой текст. Для включения HTML необходимо установить параметр:
tippy('#myButton', {
content: '<strong>Жирный текст</strong> и <em>курсив</em>',
allowHTML: true
});
Пояснение:
content – строка, содержащая HTML-разметку.allowHTML: true – разрешает интерпретацию HTML внутри
тултипа. Без этой опции HTML будет отображаться как текст, включая
теги.Помимо строки, в content можно передавать DOM-элемент
или Node:
const tooltipContent = document.createElement('div');
tooltipContent.innerHTML = `
<h4>Заголовок</h4>
<p>Описание с <a href="#">ссылкой</a></p>
`;
tippy('#myButton', {
content: tooltipContent,
allowHTML: true
});
Преимущества такого подхода:
Tippy.js поддерживает интерактивные тултипы, которые позволяют взаимодействовать с элементами внутри контента, например, нажимать кнопки или вводить текст.
tippy('#interactiveBtn', {
content: '<button id="insideBtn">Нажми меня</button>',
allowHTML: true,
interactive: true,
onShow(instance) {
const button = instance.popper.querySelector('#insideBtn');
button.addEventListener('click', () => {
alert('Кнопка внутри тултипа нажата!');
});
}
});
Ключевые моменты:
interactive: true предотвращает закрытие тултипа при
наведении на его содержимое.onShow можно добавлять обработчики событий для
элементов тултипа.instance.popper.querySelector позволяет
находить элементы внутри тултипа динамически.Содержимое тултипа можно менять после его создания через метод
setContent:
const myTippy = tippy('#dynamicBtn', {
content: '<p>Первый контент</p>',
allowHTML: true
});
document.querySelector('#changeContent').addEventListener('click', () => {
myTippy[0].setContent('<p>Новый <strong>HTML</strong> контент</p>');
});
Особенности:
setContent принимает как строку с HTML, так и
DOM-элемент.Использование HTML повышает риск XSS-уязвимостей, особенно если контент формируется из внешних источников. Рекомендуется:
allowHTML: true только для доверенного
контента.content.createElement вместо вставки сырого HTML, если содержимое
динамическое.Tippy.js позволяет создавать тултипы с более сложной разметкой, например, карточки с заголовком, изображением и кнопкой:
const card = document.createElement('div');
card.innerHTML = `
<img src="avatar.jpg" alt="Аватар" width="50">
<h3>Имя пользователя</h3>
<p>Краткое описание профиля.</p>
<button>Подробнее</button>
`;
tippy('#profileBtn', {
content: card,
allowHTML: true,
interactive: true
});
Такой подход позволяет интегрировать тултипы в интерфейс, делая их полноценными мини-компонентами, которые могут содержать не только текст, но и графику и интерактивные элементы.
allowHTML: true при работе с
HTML-контентом.interactive: true.setContent позволяет обновлять HTML без
пересоздания тултипа.HTML-содержимое расширяет возможности Tippy.js, превращая простые подсказки в гибкие и интерактивные интерфейсные элементы, управляемые через JavaScript.