Библиотека Tippy.js позволяет создавать сложные и гибкие всплывающие подсказки (tooltips) с широкими возможностями настройки позиционирования. Одним из ключевых аспектов является управление позиционированием элементов: фиксированное (fixed) и абсолютное (absolute). Понимание этих режимов особенно важно при работе с динамическими интерфейсами, скроллируемыми контейнерами и сложной структурой DOM.
Абсолютное позиционирование в Tippy.js привязывает подсказку к ближайшему родителю с относительным позиционированием (position: relative) в DOM. Это стандартное поведение библиотеки по умолчанию.
Особенности:
Пример использования:
tippy('#button', {
content: 'Подсказка с абсолютным позиционированием',
placement: 'right',
theme: 'light',
});
В этом примере подсказка будет располагаться справа от кнопки и перемещаться вместе с ней, если родительский контейнер смещается.
Фиксированное позиционирование привязывает подсказку к вьюпорту браузера, независимо от прокрутки родительских элементов. Этот режим особенно полезен для элементов, которые находятся внутри скроллируемых контейнеров или для глобальных уведомлений, которые должны оставаться видимыми на экране.
Активация fixed режима:
tippy('#button', {
content: 'Подсказка с фиксированным позиционированием',
placement: 'bottom',
popperOptions: {
strategy: 'fixed', // ключевой параметр
},
});
Особенности:
| Свойство | Absolute | Fixed |
|---|---|---|
| Относительно чего позиционируется | Родительский элемент с position: relative/absolute |
Вьюпорт (окно браузера) |
| Поведение при прокрутке родителя | Перемещается вместе с родителем | Остаётся на месте |
| Используется по умолчанию | Да | Нет, требует popperOptions.strategy = 'fixed' |
| Подходит для | Статичных компонентов внутри контейнера | Скроллируемых областей и глобальных подсказок |
Tippy.js строится на Popper.js, который управляет позиционированием подсказок. Ключевой параметр — strategy, который может принимать значения:
"absolute" — по умолчанию, подсказка привязана к
родителю."fixed" — подсказка привязана к вьюпорту.Кроме того, можно управлять поведением подсказки при ограничениях области с помощью modifiers:
tippy('#button', {
content: 'Подсказка с ограничением по области',
placement: 'top',
popperOptions: {
strategy: 'absolute',
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: document.querySelector('#scrollContainer'),
},
},
],
},
});
Здесь подсказка не выйдет за пределы контейнера
#scrollContainer, сохраняя абсолютное позиционирование.
Иногда требуется менять стратегию позиционирования в зависимости от состояния интерфейса:
const tippyInstance = tippy('#button', {
content: 'Подсказка',
placement: 'right',
});
document.querySelector('#toggle').addEventListener('click', () => {
tippyInstance.setProps({
popperOptions: {
strategy: 'fixed',
},
});
});
Это позволяет динамически адаптировать подсказку под контекст: фиксированная для глобальных уведомлений, абсолютная для локальных элементов.
overflow, transform, position,
так как они влияют на расчет позиции.