Параметр placement в Floating UI определяет
позицию всплывающего элемента относительно его
reference-элемента. Он задаёт направление, в котором должен
располагаться флоатинг-элемент, а также его вариацию по оси. Типичные
значения имеют форму:
<основное направление>-<вариация>
top,
bottom, left, right.start,
end, либо отсутствие вариации (центрирование).Примеры значений:
top — элемент размещается над reference-элементом, по
центру.bottom-start — элемент размещается под
reference-элементом, выравнивание по левому краю.right-end — элемент справа от reference-элемента,
выравнивание по нижнему краю.Если вариация не указана, по умолчанию происходит центрирование по основной оси.
placement на позиционированиеПараметр placement тесно связан с логикой offset
и middleware в Floating UI. Влияние можно разложить на
следующие аспекты:
Направление смещения
top и bottom изменяют вертикальное
расположение.left и right влияют на горизонтальное
расположение.Вариация (start /
end)
start выравнивает флоатинг по началу оси
reference-элемента.end — по концу оси.Совместимость с flip middleware
Когда указано фиксированное placement, middleware
flip может менять направление при нехватке места. Например,
top-start может автоматически превратиться в
bottom-start, если сверху нет свободного
пространства.
placementКонтекст интерфейса Выбор зависит от того, с
какой стороны reference-элемента пользователь ожидает увидеть
всплывающее окно. Например, выпадающие меню чаще всего используют
bottom-start.
Доступное пространство При ограниченном
пространстве лучше использовать комбинацию placement с
middleware flip и shift, чтобы предотвратить
обрезку содержимого.
Направление текста Для RTL интерфейсов значения
start и end меняются: start
соответствует правому краю, end — левому.
placementПростейший пример использования Floating UI с указанием
placement:
import { computePosition, offset, flip, shift } from '@floating-ui/dom';
const reference = document.querySelector('#button');
const floating = document.querySelector('#tooltip');
computePosition(reference, floating, {
placement: 'top-start',
middleware: [offset(10), flip(), shift({ padding: 5 })],
}).then(({ x, y }) => {
Object.assign(floating.style, {
left: `${x}px`,
top: `${y}px`,
});
});
placement: 'top-start' — всплывающий элемент появляется
над кнопкой, выравнивание по левому краю.offset(10) — добавляет отступ от
reference-элемента.flip() — позволяет менять направление при нехватке
места.shift({ padding: 5 }) — корректирует позицию, чтобы
элемент не выходил за границы viewport.| Основное направление | Без вариации | Вариация start |
Вариация end |
|---|---|---|---|
top |
Центр над элементом | Слева над элементом | Справа над элементом |
bottom |
Центр под элементом | Слева под элементом | Справа под элементом |
left |
Центр слева | Сверху слева | Снизу слева |
right |
Центр справа | Сверху справа | Снизу справа |
bottom-start или top-start.placement с middleware
flip и shift, чтобы флоатинг корректно
адаптировался к размерам окна.placement в зависимости от видимой области или положения
скролла.Параметр placement — это базовый и критически важный
инструмент Floating UI, который задаёт направление и выравнивание
флоатинг-элемента. Его грамотное использование вместе с middleware
обеспечивает гибкое, адаптивное и предсказуемое позиционирование
элементов интерфейса.