Точная настройка поведения всплывающих элементов (tooltip, dropdown,
popover) в Popper.js во многом определяется модификаторами, связанными с
ограничением области отображения. Ключевую роль здесь играют параметры
padding и boundary, которые используются в
модификаторах preventOverflow и flip.
boundary определяет область, внутри которой Popper
стремится удержать всплывающий элемент. Если поппер выходит за пределы
этой области, срабатывают механизмы корректировки — сдвиг
(preventOverflow) или смена стороны
(flip).
boundaryclippingParents (по умолчанию)
Использует ближайших родителей с ограничением overflow
(overflow: hidden, scroll,
auto).
viewport Ограничивает
позиционирование рамками видимой области браузера.
document Использует весь документ,
включая прокручиваемую часть.
HTMLElement Конкретный DOM-элемент, внутри которого должен оставаться поппер.
createPopper(referenceElement, popperElement, {
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: 'viewport'
}
}
]
});
В этом случае поппер не выйдет за пределы окна браузера, даже если родительские элементы позволяют это.
Использование boundary особенно важно при:
overflow: hiddenНеправильно выбранная граница может привести к:
paddingpadding задаёт внутренний отступ от границы
(boundary), при котором начинается срабатывание
ограничений.
Фактически это “буферная зона”, позволяющая избежать прилипания popper к краю.
padding: 8
padding: {
top: 10,
right: 20,
bottom: 10,
left: 20
}
Модификатор preventOverflow использует
padding, чтобы определить безопасную область
размещения.
createPopper(referenceElement, popperElement, {
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: 'viewport',
padding: 16
}
}
]
});
Результат:
Модификатор flip также учитывает padding,
чтобы определить, когда нужно сменить сторону отображения.
{
name: 'flip',
options: {
padding: 12
}
}
Логика:
padding,
Popper попытается “перевернуться”.Наиболее гибкая настройка достигается при совместном использовании:
createPopper(referenceElement, popperElement, {
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: document.querySelector('.container'),
padding: 10
}
},
{
name: 'flip',
options: {
boundary: 'viewport',
padding: 8
}
}
]
});
preventOverflow ограничивает перемещение внутри
контейнераflip ориентируется на viewport и меняет сторону при
необходимостиpadding позволяют гибко управлять
поведениемboundary: document.querySelector('.scroll-area')
Используется для:
boundary: 'viewport',
padding: 0
Применяется в:
boundary: 'viewport',
padding: 20
Даёт:
Правильная настройка padding и boundary
напрямую влияет на:
Чрезмерно маленький padding:
Слишком большой padding:
Popper вычисляет:
boundary)padding)Затем:
boundary: 'viewport'
При наличии overflow: hidden у родителей это может
привести к обрезанию popper.
preventOverflow → boundary: container
flip → boundary: viewport
Может вызвать:
padding: 0
Риск:
clippingParentsboundaryviewportpadding держать в диапазоне 8–16pxboundary между
preventOverflow и flipboundary определяет допустимую областьpadding уменьшает эту область, создавая безопасную
зонуpreventOverflow сдвигает popper внутрьflip меняет сторону, если места недостаточноТакая система позволяет точно контролировать позиционирование и адаптацию всплывающих элементов в любых условиях интерфейса.