В контексте библиотеки Popper.js термин
boundary относится к области, ограничивающей
позиционирование всплывающего элемента (popper). Эта область определяет,
до каких границ popper может «выходить», и используется для
предотвращения наложения на другие элементы страницы или выхода за
пределы видимой области.
boundary является ключевым параметром при работе с
модификатором preventOverflow, который отвечает за
удержание popper внутри допустимой зоны. Понимание работы
boundary позволяет точно контролировать поведение
всплывающих подсказок, дропдаунов и тултипов.
boundaryPopper.js поддерживает несколько вариантов задания
boundary:
clippingParents (по умолчанию)
Использует ближайших родителей элемента, которые обрезают overflow, в
качестве границ. Это гарантирует, что popper не выйдет за видимую
область контейнеров с ограниченной прокруткой.
viewport Ограничивает popper
видимой областью окна браузера. Это полезно для элементов, которые
должны оставаться полностью видимыми на экране независимо от
родительских контейнеров.
window Подобно
viewport, но учитывает весь размер окна документа, включая
прокрутку. Используется реже, чаще для полных страниц с фиксированными
элементами.
Элемент DOM Можно указать конкретный элемент,
например document.querySelector('#container'). В этом
случае popper не будет выходить за границы указанного элемента.
boundary с модификатором preventOverflowМодификатор preventOverflow обеспечивает
автоматическое корректирование позиции popper, если он выходит за
границы boundary. Пример конфигурации:
const popperInstance = Popper.createPopper(referenceElement, popperElement, {
modifiers: [
{
name: 'preventOverflow',
options: {
boundary: 'viewport', // ограничения относительно видимой области
padding: 8, // отступ от границы
},
},
],
});
Ключевые моменты:
padding задаёт расстояние между popper и границей,
предотвращая слипание с краем.boundary может быть массивом элементов, если нужно
учитывать несколько зон.Реакция на прокрутку и изменение размеров Popper
пересчитывает позицию при изменении размеров окна или прокрутке,
учитывая границы boundary. Это обеспечивает стабильное
отображение элементов, не выходящих за отведённое пространство.
Приоритет по осям Модификатор preventOverflow
учитывает оси mainAxis и altAxis. При
конфликте с границей, popper сначала корректирует основную ось, затем
второстепенную.
Взаимодействие с flip Модификатор
flip может менять ориентацию popper для соблюдения границ
boundary. Например, если тултип не помещается справа, он
автоматически перемещается влево.
clippingParents, чтобы popper не «вылезал» за пределы
родительских блоков.viewport или конкретный контейнер, если нужно строгое
ограничение.padding, чтобы избежать наложения
popper на границы и соседние элементы.Можно визуально проверить границы boundary с помощью
небольшого CSS:
.boundary-test {
outline: 2px dashed red;
}
Присвоив этот класс родительскому элементу или viewport, можно убедиться, что popper корректно остаётся внутри зоны.
boundary задан неправильно (например, элемент не
существует в DOM), popper может выйти за пределы видимой области.preventOverflow, другие модификаторы их игнорируют.boundary тесно связан с вычислением
rect popper и reference. Понимание структуры DOM и
overflow контейнеров критично для точного позиционирования.