В Popper.js padding для стрелки используется для того, чтобы ограничить область, в пределах которой стрелка может перемещаться, предотвращая её соприкосновение с краями всплывающего элемента или родителя. Это особенно важно для создания визуально аккуратных тултипов, поповеров и других всплывающих элементов с указателями.
Стрелка в Popper.js задаётся через модификатор arrow.
Модификатор принимает объект с ключом element, указывающим
на DOM-элемент стрелки, а также ключ padding, задающий
внутренний отступ в пикселях или массив из чисел для разных сторон.
Пример базовой конфигурации:
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
modifiers: [
{
name: 'arrow',
options: {
element: arrowElement,
padding: 8 // минимальное расстояние стрелки от границ поппера
},
},
],
});
В этом примере padding: 8 гарантирует, что стрелка не
будет выходить за пределы поппера на расстояние меньше 8 пикселей.
Ограничение движения стрелки Popper.js вычисляет
центр стрелки относительно габаритов поппера и позиции родительского
элемента. padding определяет минимальное расстояние между
стрелкой и краем поппера, что предотвращает наложение стрелки на бордюры
или скругления.
Поддержка разных значений padding
[top, right, bottom, left] — индивидуальные
отступы для каждой стороны.Пример:
padding: [4, 10, 4, 10] // верх/право/низ/лево
arrow работает в паре с preventOverflow и
flip. Если стрелка не помещается внутри границ,
preventOverflow корректирует её позицию, учитывая padding,
а flip может менять сторону поппера.modifiers: [
{ name: 'arrow', options: { element: arrowElement, padding: 5 } },
{ name: 'preventOverflow', options: { padding: 10 } },
{ name: 'flip', options: { fallbackPlacements: ['top', 'bottom'] } },
]
Здесь arrow.padding и
preventOverflow.padding могут отличаться, так как первый
регулирует только положение стрелки, а второй — сам поппер внутри границ
окна или контейнера.
Попер.js использует математические формулы для позиционирования
стрелки. Ключевой принцип: центровать стрелку относительно
привязанного элемента, но с учётом padding:
arrowCenter = referenceCenter - popperOffset + padding
referenceCenter — центр привязанного элемента.popperOffset — смещение поппера относительно
reference.padding — минимальный отступ стрелки от края
поппера.Это позволяет стрелке оставаться визуально корректной даже при динамическом изменении размеров поппера или viewport.
popperInstance.setOptions, чтобы адаптироваться под
размеры контента:popperInstance.setOptions({
modifiers: [
{
name: 'arrow',
options: { element: arrowElement, padding: computeDynamicPadding() }
}
]
});
Использование padding для стрелки в Popper.js позволяет
создавать точные, аккуратные и визуально сбалансированные указатели,
обеспечивая гармоничное взаимодействие между popper-элементом и его
триггером.