Tippy.js позволяет динамически изменять позицию тултипа в зависимости от доступного пространства на странице. Это особенно важно для элементов, расположенных близко к краям окна браузера, где стандартная позиция может привести к обрезанию контента или наложению на другие элементы.
flipОсновной механизм автоматического переключения позиции реализован
через опцию flip. Она управляет тем, как Tippy.js будет
выбирать альтернативные позиции, если выбранная изначально
недоступна.
tippy('#myButton', {
content: 'Информация о кнопке',
placement: 'top',
flip: true
});
flip: true — включает автоматическое
переключение позиции на противоположную (например, с top на
bottom).flip: false — отключает поведение,
тултип всегда будет отображаться в указанной позиции.Для более гибкой настройки можно указать массив разрешённых позиций:
tippy('#myButton', {
content: 'Информация о кнопке',
placement: 'top',
flip: ['top', 'right', 'bottom', 'left']
});
Tippy.js будет по очереди пробовать позиции из массива до тех пор, пока тултип полностью не уместится на экране.
flip через Popper.jsTippy.js использует Popper.js для расчета положения, поэтому все
возможности Popper можно применять через опцию
popperOptions.
tippy('#myButton', {
content: 'Информация о кнопке',
placement: 'top',
popperOptions: {
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['right', 'bottom', 'left'],
padding: 8,
boundary: 'viewport'
}
}
]
}
});
Объяснение ключевых параметров:
fallbackPlacements — список
альтернативных позиций для тултипа при недостатке места.padding — минимальное расстояние между
тултипом и границей контейнера.boundary — элемент, в пределах
которого проверяется доступное пространство (viewport,
scrollParent или конкретный DOM-элемент).Эти параметры дают полный контроль над тем, как Tippy.js будет вести себя на различных разрешениях экрана и при изменении размеров окна.
Если на странице одновременно несколько элементов с тултипами, важно
корректно настроить автоматическое переключение, чтобы они не
перекрывали друг друга. Для этого можно комбинировать flip
и preventOverflow:
tippy('.info', {
content: 'Подсказка',
placement: 'top',
popperOptions: {
modifiers: [
{ name: 'flip', options: { fallbackPlacements: ['bottom', 'right'] } },
{ name: 'preventOverflow', options: { padding: 10 } }
]
}
});
preventOverflow — не позволяет тултипу
выходить за пределы контейнера, даже если flip
активен.padding внутри
preventOverflow добавляет безопасное расстояние от границ
окна или родительского контейнера.Такое сочетание обеспечивает надежное отображение подсказок без обрезания текста и перекрытий других элементов.
Иногда размеры страницы или контента элемента могут изменяться после
инициализации тултипа. Tippy.js позволяет вручную пересчитать положение
тултипа через метод popperInstance.update():
const tip = tippy('#myButton', {
content: 'Информация',
placement: 'top',
});
document.querySelector('#myButton').addEventListener('click', () => {
tip[0].popperInstance.update();
});
Это гарантирует, что тултип пересчитает доступное пространство и при необходимости переключится на альтернативную позицию.
auto для автоматического выбора позицииДля полного автоматического выбора позиции можно указать
placement: 'auto'. Tippy.js сам определит оптимальное
расположение тултипа на основе пространства вокруг элемента:
tippy('#myButton', {
content: 'Авто-позиция',
placement: 'auto',
});
popperOptions с правильными модификаторами
flip и preventOverflow.flip: true или
placement: 'auto' для элементов рядом с краями окна.fallbackPlacements для сложных макетов,
чтобы тултипы не перекрывали критичные элементы.flip и preventOverflow для
максимальной надежности отображения.popperInstance.update()
после динамического изменения размеров контента или контейнера.Эти методы обеспечивают гибкость и стабильность отображения подсказок в любых условиях интерфейса.