Библиотека Tippy.js использует механизм позиционирования на основе Popper (Popper.js), который рассчитывает координаты всплывающего элемента относительно целевого. Основная цель — обеспечить корректное размещение tooltip’а независимо от размеров окна, прокрутки и доступного пространства.
Ключевой параметр управления размещением — placement. Он
определяет, с какой стороны относительно целевого элемента будет
отображаться всплывающая подсказка.
placementПараметр placement принимает строку, определяющую
направление:
topbottomleftrightПример:
tippy(button, {
placement: 'top'
});
Каждое направление можно уточнить с помощью суффиксов:
-start — выравнивание по началу-end — выравнивание по концуПолный список:
top-starttop-endbottom-startbottom-endleft-startleft-endright-startright-endПример:
tippy(button, {
placement: 'right-start'
});
start и end зависят от направления текста
(LTR/RTL)flip)Если заданное положение невозможно из-за ограниченного пространства, Tippy автоматически изменяет его.
tippy(button, {
placement: 'top',
flip: true
});
popperOptionstippy(button, {
popperOptions: {
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['bottom', 'right']
}
}
]
}
});
preventOverflow)Предотвращает выход tooltip’а за пределы видимой области.
tippy(button, {
popperOptions: {
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: 'viewport'
}
}
]
}
});
boundaryviewport — границы окнаwindowscrollParentoptions: {
padding: 8
}
Определяет отступ от границ.
offset)Позволяет точно настроить расстояние между элементом и tooltip’ом.
tippy(button, {
offset: [0, 10]
});
offset: [skidding, distance]
skidding — смещение вдоль оси элементаdistance — расстояние от элемента// Смещение вниз на 15px
offset: [0, 15]
// Смещение вправо и вниз
offset: [10, 20]
followCursor)Tooltip следует за курсором мыши.
tippy(button, {
followCursor: true
});
true — полностью следуетhorizontal — только по Xvertical — только по Yinitial — фиксируется в начальной позицииinteractive)Позволяет взаимодействовать с содержимым tooltip’а (например, кнопки, ссылки).
tippy(button, {
interactive: true
});
interactiveBorder)interactiveBorder: 10
arrow) и её позиционированиеtippy(button, {
arrow: true
});
placementtippy(button, {
arrow: '<div class="custom-arrow"></div>'
});
appendTo)Определяет, куда в DOM добавляется tooltip.
tippy(button, {
appendTo: document.body
});
document.body — стандартное поведение'parent' — внутри родителяoverflow: hiddenstrategy)tippy(button, {
popperOptions: {
strategy: 'fixed'
}
});
absolute — по умолчаниюfixed — относительно viewportfixedgetReferenceClientRect)Позволяет позиционировать tooltip относительно произвольных координат.
tippy(document.body, {
getReferenceClientRect: () => ({
width: 0,
height: 0,
top: 100,
bottom: 100,
left: 200,
right: 200
})
});
setPropsinstance.setProps({
placement: 'bottom'
});
popperInstance.update()instance.popperInstance.update();
Используется при изменении размеров или контента.
Tippy автоматически отслеживает:
Однако в сложных случаях можно вручную обновить:
window.addEventListener('scroll', () => {
instance.popperInstance.update();
});
tippy(button, {
popperOptions: {
placement: 'top',
modifiers: [
{
name: 'offset',
options: {
offset: [0, 12]
}
},
{
name: 'flip',
options: {
fallbackPlacements: ['bottom', 'right']
}
},
{
name: 'preventOverflow',
options: {
boundary: 'viewport',
padding: 10
}
}
]
}
});
positionoverflowtransformz-indexoverflow: hidden может обрезать tooltiptransform создаёт новый контекст позиционированияz-index влияет на перекрытиеplacement как базовую настройкуoffset для визуального балансаflip для адаптивностиpreventOverflow для сложных
интерфейсовappendTo: document.body при проблемах с
контейнерамиfixed стратегию в сложных layout’ахНеправильное выравнивание
placementstart/endTooltip обрезается
overflow: hiddenappendTo: document.bodyНеправильная позиция при скролле
strategy: fixedСмещение выглядит странно
offset[skidding, distance]Параметры размещения не работают изолированно:
placement задаёт базовое направлениеflip может его изменитьpreventOverflow корректирует координатыoffset добавляет финальное смещениеИтоговая позиция — результат последовательной обработки этих модификаторов.