Popper.js предоставляет мощный механизм для позиционирования элементов на странице, особенно всплывающих подсказок, тултипов, дропдаунов и модальных окон. Ключевым аспектом контроля позиционирования является смещение по осям X и Y, которое позволяет точно управлять расположением поппера относительно целевого элемента.
modifiers и
offsetДля задания смещения используется модификатор offset,
который подключается через массив modifiers при создании
экземпляра Popper:
import { createPopper } from '@popperjs/core';
const reference = document.querySelector('#button');
const popper = document.querySelector('#tooltip');
createPopper(reference, popper, {
placement: 'top',
modifiers: [
{
name: 'offset',
options: {
offset: [0, 8], // [смещение по X, смещение по Y]
},
},
],
});
Здесь offset: [skidding, distance] задаёт два
параметра:
top/bottom, вертикально при
left/right).placement: 'top' popper смещается вниз).При использовании отрицательных значений смещение происходит в противоположную сторону:
offset: [-10, -5] // X сдвиг на 10 пикселей влево, Y — на 5 пикселей вверх
Popper.js позволяет использовать функции для динамического расчета смещения:
modifiers: [
{
name: 'offset',
options: {
offset: ({ placement, reference, popper }) => {
if (placement.startsWith('top')) {
return [0, -10]; // поднимаем поппер выше reference
} else {
return [0, 10]; // опускаем поппер ниже reference
}
},
},
},
],
Функция получает объект с ключами: placement,
reference, popper, что позволяет рассчитывать
смещение в зависимости от контекста и размеров элементов.
Смещение работает совместно с другими модификаторами:
offset: [10, 5]
offset: [-5, -8]
offset: ({ reference }) => {
const screenWidth = window.innerWidth;
return screenWidth < 600 ? [0, 4] : [0, 12];
}
placement, а
корректирует его.offset с flip и preventOverflow,
чтобы попперы не перекрывали важные элементы или не выходили за границы
экрана.offset — основной инструмент для точной настройки
позиции.[skidding, distance] позволяют контролировать
горизонтальное и вертикальное смещение независимо.Смещение по осям X и Y в Popper.js — это не просто опция для визуальной настройки, а инструмент, позволяющий интегрировать попперы в сложные интерфейсы с точным контролем над пространством и поведением.