Popper.js предоставляет гибкий механизм позиционирования всплывающих
элементов относительно целевых (reference) элементов. Одним из ключевых
параметров настройки является placement. Он определяет,
где именно будет отображаться поппер относительно привязанного
элемента, и влияет на расчет координат, трансформаций и
поведение в случае столкновений с границами окна.
placementЗначение placement задается строкой и может принимать
несколько категорий:
Основные направления:
top — поппер отображается над reference
элементом, по вертикали.bottom — поппер отображается под reference
элементом.left — поппер отображается слева от reference
элемента.right — поппер отображается справа от reference
элемента.Эти направления задают базовую ориентацию, от которой потом могут применяться дополнительные смещения.
Варианты с выравниванием:
Помимо базовых направлений, можно уточнить положение с помощью
выравнивания: -start или -end.
top-start — над reference элементом, выровнено по
левому краю.top-end — над reference элементом, выровнено по правому
краю.bottom-start — под reference элементом, выровнено по
левому краю.bottom-end — под reference элементом, выровнено по
правому краю.left-start — слева, выровнено по верхнему краю.left-end — слева, выровнено по нижнему краю.right-start — справа, выровнено по верхнему краю.right-end — справа, выровнено по нижнему краю.Эти модификаторы позволяют более точно контролировать положение поппера, особенно когда размеры reference элемента и самого поппера отличаются.
Popper.js поддерживает динамическую смену позиции при нехватке места
с использованием модификатора flip. Если выбранное значение
placement приводит к частичному выходу поппера за границы
видимой области, библиотека может автоматически изменить
направление.
Пример:
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
placement: 'top',
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['bottom', 'right', 'left'],
},
},
],
});
В этом случае, если сверху нет места, поппер попробует отобразиться снизу, затем справа и слева, пока не найдется подходящее положение.
placement на смещение (offset)placement напрямую определяет направление, в котором
применяется смещение:
top и bottom основной осью смещения
будет вертикальная координата (y).left и right основной осью будет
горизонтальная координата (x).Пример использования offset с уточнением позиции:
modifiers: [
{
name: 'offset',
options: {
offset: [0, 10], // 0 по основной оси, 10px дополнительное смещение
},
},
]
Здесь второй параметр [0, 10] добавляет отступ в
направлении, определяемом placement.
Для сложных интерфейсов часто используют динамическое формирование
значения placement в зависимости от размеров окна, позиции
scroll или других условий. Popper.js позволяет задавать
placement как функцию, возвращающую
строку:
placement: ({ placement, reference, popper }) => {
return window.innerWidth < 500 ? 'bottom-start' : 'top-end';
}
Это особенно удобно при адаптивной верстке и мобильных интерфейсах, где требуется менять позицию поппера в зависимости от ширины экрана.
preventOverflow — контролирует, чтобы поппер не
выходил за границы контейнера. При этом placement
может быть изменен внутренними вычислениями.flip — автоматически корректирует
placement, если выбранная позиция недоступна.arrow — использование стрелки требует точного учета
placement, так как библиотека рассчитывает её позицию
относительно стороны поппера.placementtop,
bottom, left, right) в
зависимости от визуальной логики интерфейса.-start и -end для
точного выравнивания при необходимости.flip и
preventOverflow для надежного позиционирования на
разных разрешениях и при скролле.placement в адаптивных интерфейсах.Правильное понимание placement позволяет создавать
интерфейсы, где попперы всегда видимы, удобно расположены и адаптируются
к условиям отображения, не нарушая композицию страницы.