Модификатор flip в библиотеке Popper.js отвечает за
автоматическое изменение положения всплывающего элемента (popper), если
в выбранном направлении недостаточно места. Это позволяет избегать
выхода за пределы области видимости (viewport) или
родительских контейнеров.
По умолчанию flip работает по следующему принципу:
placement);Однако в реальных интерфейсах требуется более тонкая настройка поведения, особенно когда определённые направления должны быть запрещены.
В ряде сценариев автоматическое поведение flip
нежелательно:
В таких случаях требуется отключить flip
частично, а не полностью.
fallbackPlacementsКлючевой инструмент — настройка свойства
fallbackPlacements в модификаторе flip.
По умолчанию Popper сам генерирует список fallback-направлений, например:
top → bottom → right → left
Для ограничения направлений задаётся собственный список:
import { createPopper } from '@popperjs/core';
createPopper(referenceElement, popperElement, {
placement: 'top',
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['bottom']
}
}
]
});
В этом примере:
top → bottom;left и right полностью
исключены.Если требуется запретить, например, горизонтальные направления:
fallbackPlacements: ['top', 'bottom']
Popper:
left или
right.Чтобы фактически отключить flip, но оставить модификатор
активным:
fallbackPlacements: []
Поведение:
placement;Это отличается от полного отключения модификатора тем, что:
allowedAutoPlacementsПри использовании placement: 'auto' Popper сам выбирает
оптимальное направление. Ограничить возможные варианты можно через
allowedAutoPlacements:
createPopper(referenceElement, popperElement, {
placement: 'auto',
modifiers: [
{
name: 'flip',
options: {
allowedAutoPlacements: ['top', 'bottom']
}
}
]
});
Теперь:
top и
bottom;left и right даже при наличии
пространства.start, end)Popper поддерживает вариации размещения:
top-starttop-endbottom-startbottom-endОграничения применяются и к ним:
fallbackPlacements: ['bottom-start', 'bottom-end']
Это позволяет:
Требование:
Решение:
createPopper(button, menu, {
placement: 'bottom-start',
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['top-start']
}
}
]
});
Результат:
bottom-start;top-start;Если важно избежать изменения направления:
createPopper(target, tooltip, {
placement: 'top',
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: []
}
}
]
});
Tooltip:
Ограничение направлений влияет на пользовательский опыт:
Плюсы:
Минусы:
Ограничения flip тесно связаны с:
preventOverflow — предотвращает выход за границы;offset — задаёт смещение;shift (в новых версиях через
preventOverflow) — корректирует позицию внутри границ.Пример комбинирования:
createPopper(reference, popper, {
placement: 'top',
modifiers: [
{
name: 'flip',
options: {
fallbackPlacements: ['bottom']
}
},
{
name: 'preventOverflow',
options: {
padding: 8
}
}
]
});
1. Пустой fallbackPlacements ≠ отключение
flip
2. auto игнорирует
fallbackPlacements
allowedAutoPlacements.3. Порядок направлений важен
4. Контейнеры с overflow
boundary.allowedAutoPlacements при
autopreventOverflow для контроля
границТакая настройка позволяет добиться баланса между автоматикой Popper и требованиями интерфейса, оставляя полный контроль над поведением всплывающих элементов.