Tippy.js — это современная библиотека для создания всплывающих подсказок, которые могут быть динамически привязаны к элементам DOM. Одним из ключевых аспектов работы с Tippy.js является точное координатное позиционирование всплывающих элементов относительно целевого объекта.
Координатное позиционирование определяется через комбинацию базовых опций библиотеки и возможностей Popper.js, на котором Tippy.js строится.
placementСвойство placement задаёт базовую ориентацию подсказки
относительно целевого элемента:
top, bottom, left,
right — стандартные направления;top-start, top-end,
bottom-start, bottom-end,
left-start, left-end,
right-start, right-end — уточнение
выравнивания по краям элемента.Пример использования:
tippy('#button', {
content: 'Подсказка сверху слева',
placement: 'top-start'
});
Ключевой момент: placement задаёт
только направление, а точная позиция определяется смещениями и
поведением модификаторов Popper.js.
offsetСвойство offset позволяет сдвигать подсказку от
заданного положения:
tippy('#button', {
content: 'Сдвинутая подсказка',
placement: 'bottom',
offset: [0, 20] // [skidding, distance]
});
Пример: [10, 30] с placement: 'top'
означает сдвиг вправо на 10px и поднятие подсказки на 30px выше
элемента.
Tippy.js использует Popper.js для точного позиционирования. Основные модификаторы, влияющие на координаты:
Пример конфигурации с модификаторами:
tippy('#button', {
content: 'Подсказка с модификаторами',
placement: 'right',
popperOptions: {
modifiers: [
{
name: 'flip',
options: { fallbackPlacements: ['left', 'top'] }
},
{ name: 'preventOverflow', options: { padding: 8 } }
]
}
});
getReferenceClientRectДля максимального контроля позиционирования можно использовать
функцию getReferenceClientRect, возвращающую объект
DOMRect, задающий координаты подсказки:
tippy(document.createElement('div'), {
content: 'Абсолютная позиция',
getReferenceClientRect: () => ({
width: 0,
height: 0,
top: 100,
bottom: 100,
left: 200,
right: 200
}),
placement: 'top'
});
Это позволяет позиционировать подсказку вне стандартных элементов или в точке, вычисляемой динамически.
Tippy.js позволяет изменять контекст позиционирования через свойства:
appendTo — задаёт контейнер, к которому будет
прикреплена подсказка. Например, можно прикреплять к
document.body или к конкретному div.boundary (через Popper.js) — определяет ограничивающую
область для проверки переполнения.tippy('#button', {
content: 'Подсказка с границами',
placement: 'bottom',
appendTo: document.body,
popperOptions: {
modifiers: [
{ name: 'preventOverflow', options: { boundary: '#container' } }
]
}
});
Ключевой момент: смещение и ограничения работают совместно. Даже при заданном offset подсказка не выйдет за пределы boundary.
Tippy.js позволяет менять координаты во время работы приложения через методы:
setProps({ placement, offset }) — изменяет положение
подсказки на лету;popperInstance.update() — пересчитывает позицию после
изменения размеров или положения целевого элемента.Пример:
const tip = tippy('#button', { content: 'Динамическая подсказка' });
tip.setProps({ placement: 'left', offset: [10, 50] });
tip.popperInstance.update();
Подсказки Tippy.js автоматически учитывают:
Однако при нестандартной верстке с transform: scale()
или position: fixed может потребоваться явная корректировка
через getReferenceClientRect.
Свойство arrow позволяет точно привязать стрелку к
целевому элементу. Tippy.js автоматически вычисляет смещение стрелки в
зависимости от координат:
tippy('#button', {
content: 'Подсказка со стрелкой',
placement: 'top',
arrow: true
});
arrow.padding.placement задаёт базовое направление;offset — точное смещение по осям;popperOptions.modifiers — контроль переполнения,
переворотов и стрелки;getReferenceClientRect — абсолютные координаты для
нестандартных ситуаций;appendTo и boundary — контроль контейнера
и границ;setProps и update — динамическая
корректировка.Координатное позиционирование Tippy.js обеспечивает максимальную гибкость, позволяя точно управлять расположением подсказок как в стандартной верстке, так и в динамически изменяемых интерфейсах.