Tippy.js изначально проектировался как библиотека для создания всплывающих подсказок, которые легко интегрируются в любой проект, не нарушая существующую структуру и стили страницы. Одной из ключевых особенностей является изоляция стилей, которая позволяет избежать конфликтов CSS и обеспечить предсказуемое поведение подсказок в любых условиях.
Для полной изоляции стилей Tippy.js может использовать Shadow DOM. Это механизм, встроенный в браузеры, который позволяет инкапсулировать HTML и CSS внутри отдельного контекста. Элементы внутри Shadow DOM не наследуют стили из основного документа и наоборот.
import tippy from 'tippy.js';
import 'tippy.js/dist/tippy.css';
tippy('#button', {
content: 'Подсказка с изолированными стилями',
appendTo: () => document.body.attachShadow({ mode: 'open' }),
});
В этом примере создаётся подсказка внутри Shadow Root, что полностью изолирует её стили. Такой подход предотвращает любые неожиданные изменения внешнего вида из-за глобальных CSS-правил.
Tippy.js поставляется с собственным CSS-файлом
tippy.css, который содержит базовые стили для подсказок.
Использование этого файла гарантирует:
arrow) и анимаций
(fade, scale).import 'tippy.js/dist/tippy.css';
При подключении tippy.css нет необходимости писать
дополнительные стили для базовых элементов подсказки, что упрощает
поддержание изоляции.
Для более гибкой настройки стилей Tippy.js поддерживает CSS-переменные, которые позволяют изменять визуальные свойства подсказки без вмешательства в глобальные стили:
.tippy-box {
--tippy-background: #333;
--tippy-color: #fff;
--tippy-arrow-size: 10px;
}
Ключевые преимущества использования CSS-переменных:
Tippy.js позволяет назначать кастомные классы каждой
подсказке через опцию theme или className:
tippy('#button', {
content: 'Подсказка с отдельным стилем',
theme: 'custom-theme',
});
.tippy-box[data-theme~='custom-theme'] {
background-color: #007bff;
color: #fff;
font-weight: bold;
}
Использование классов помогает изолировать визуальные настройки, не создавая глобальных правил, которые могут затронуть другие компоненты страницы.
Даже при использовании Shadow DOM и CSS-переменных иногда возможны конфликты:
box-sizing, font-family и
margin/padding..tooltip, .arrow),
что приведет к непредсказуемому поведению.Для предотвращения конфликтов рекомендуется:
appendTo для закрепления подсказки в
отдельном контейнере.Tippy.js позволяет динамически создавать подсказки с индивидуальными стилями в зависимости от состояния приложения:
const buttons = document.querySelectorAll('.btn');
buttons.forEach(button => {
tippy(button, {
content: `Подсказка для ${button.textContent}`,
theme: button.dataset.theme,
appendTo: () => document.body.attachShadow({ mode: 'open' }),
});
});
Такой подход гарантирует, что каждая подсказка будет иметь полностью отдельный стиль, независимо от остальных элементов страницы, и предотвращает любые непредвиденные визуальные изменения.
tippy.css для базовой структуры
подсказок.theme/className.Эти методы обеспечивают, что всплывающие подсказки Tippy.js сохраняют консистентность и предсказуемость на любой веб-странице, независимо от внешних стилей и библиотек.