Popper.js — это библиотека для создания динамических всплывающих
элементов, таких как тултипы, дропдауны и подсказки, которые должны
позиционироваться относительно целевого элемента. Одним из ключевых
аспектов управления позицией является смещение элемента
(offset), которое позволяет точно контролировать расстояние
между поппером и его референсом.
offsetСмещение задается через модификатор offset. Оно
определяет расстояние в пикселях (или процентах) между поппером и
референсом. В Popper.js версии 2 синтаксис выглядит следующим
образом:
import { createPopper } from '@popperjs/core';
const reference = document.querySelector('#button');
const popper = document.querySelector('#tooltip');
createPopper(reference, popper, {
modifiers: [
{
name: 'offset',
options: {
offset: [0, 10], // [skid, distance]
},
},
],
});
top и bottom это
горизонтальное смещение, для left и right —
вертикальное.Например, [0, 10] означает, что поппер будет находиться
на 10 пикселей ниже элемента при положении top или выше при
положении bottom.
Модификатор offset может принимать функцию, что
позволяет динамически изменять смещение в зависимости от размеров
элементов или других условий:
offset: ({ popper, reference, placement }) => {
if (placement.startsWith('top')) {
return [0, reference.offsetHeight + 5];
} else {
return [0, 10];
}
}
Параметры функции:
top, bottom, left,
right).Функция должна возвращать массив [skid, distance],
аналогичный статической конфигурации.
Смещение играет важную роль при использовании
авто-позиционирования (flip). Если
смещение слишком большое, Popper может не помещаться в видимой области,
и срабатывание модификатора flip может привести к
неожиданному поведению. Рекомендуется:
top,
bottom, left, right).preventOverflow.Смещение тесно взаимодействует с модификаторами:
Пример комбинирования:
createPopper(reference, popper, {
modifiers: [
{
name: 'offset',
options: { offset: [0, 12] },
},
{ name: 'flip', options: { fallbackPlacements: ['top', 'bottom'] } },
{ name: 'preventOverflow', options: { padding: 8 } },
{ name: 'arrow', options: { element: '.arrow' } },
],
});
distance управляет
вертикальным отступом, skid — горизонтальным.distance управляет
горизонтальным отступом, skid — вертикальным.[skid, distance] можно использовать для точного
позиционирования по обеим осям.Смещение — это базовый, но критически важный инструмент Popper.js для
точного управления положением всплывающих элементов. Правильная
настройка offset в сочетании с другими модификаторами
позволяет создавать стабильные, предсказуемые и визуально аккуратные
интерфейсы.