Popper.js предоставляет гибкий механизм управления положением
всплывающих элементов относительно их таргетов. Основой этого механизма
является объект options, который задается при создании
экземпляра поппера через конструктор
Popper.createPopper(reference, popper, options).
Объект options может содержать несколько ключевых свойств, каждое из которых влияет на поведение и позиционирование поппера.
placementСвойство placement определяет изначальное расположение
поппера относительно таргета. Оно принимает строковые значения:
top — выше таргетаbottom — ниже таргетаleft — слева от таргетаright — справа от таргетаМожно уточнять точку привязки с помощью варианта -start
или -end:
placement: 'top-start' // поппер будет выше и сдвинут к левому краю таргета
placement: 'bottom-end' // поппер будет снизу и сдвинут к правому краю таргета
Если указанный placement недоступен из-за ограничений экрана, Popper автоматически попытается подобрать подходящее альтернативное расположение.
modifiersmodifiers — массив объектов, влияющих на поведение
поппера. Каждый модификатор содержит следующие поля:
name — уникальное имя
модификатораenabled — логическое значение, включен
ли модификаторphase — стадия, на которой применяется
модификатор (read, main,
write)fn — функция, реализующая логику
модификатораoptions — дополнительные настройки
модификатораПримеры встроенных модификаторов:
offset — задает отступ поппера от
таргета:modifiers: [{
name: 'offset',
options: {
offset: [0, 10] // горизонтальный и вертикальный сдвиг
}
}]
flip — позволяет попперу изменять
позицию при нехватке места:modifiers: [{
name: 'flip',
options: {
fallbackPlacements: ['top', 'right', 'left'] // альтернативные позиции
}
}]
preventOverflow — ограничивает выход
поппера за границы окна или контейнера:modifiers: [{
name: 'preventOverflow',
options: {
boundary: 'viewport', // границы для проверки
padding: 8 // минимальный отступ
}
}]
arrow — управляет положением стрелки
поппера:modifiers: [{
name: 'arrow',
options: {
element: '.arrow' // селектор или DOM-элемент стрелки
}
}]
strategyСвойство strategy задает тип позиционирования CSS для
поппера:
absolute — элемент позиционируется
относительно ближайшего предка с position: relativefixed — элемент позиционируется
относительно окна браузераПример использования:
strategy: 'fixed'
Это особенно важно для всплывающих меню, которые должны оставаться на месте при скролле страницы.
onFirstUpdateФункция onFirstUpdate вызывается при первом расчете
позиции поппера:
onFirstUpdate: (state) => {
console.log('Поппер установлен на позицию:', state.placement);
}
Она позволяет выполнять действия после начального рендеринга, например, анимацию появления или регистрацию события.
modifiers и optionsupdate экземпляра поппера.read,
main, write) позволяют оптимизировать процесс
расчета и избежать лишних перерисовок.Пример комплексной конфигурации:
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
placement: 'bottom-start',
strategy: 'fixed',
modifiers: [
{
name: 'offset',
options: { offset: [0, 12] }
},
{
name: 'flip',
options: { fallbackPlacements: ['top', 'right'] }
},
{
name: 'preventOverflow',
options: { boundary: 'viewport', padding: 5 }
},
{
name: 'arrow',
options: { element: '.arrow' }
}
],
onFirstUpdate: (state) => {
console.log('Начальное положение поппера:', state.placement);
}
});
Эта конфигурация демонстрирует базовые возможности Popper.js: позиционирование с уточнением, динамическая подстройка при нехватке места, управление отступами, стрелкой и фиксированной стратегией.
placement задает начальное расположение поппера, а
flip обеспечивает адаптивность.modifiers дают полный контроль над поведением: от
смещений до предотвращения выхода за границы.strategy определяет тип CSS-позиционирования и влияет
на реакцию на скролл.onFirstUpdate позволяет реагировать на первый рендер и
корректировать состояние поппера.Понимание и правильная настройка этих параметров обеспечивает точное, предсказуемое и гибкое управление позиционированием всплывающих элементов на странице.