Radix UI предоставляет гибкую систему для управления компонентами пользовательского интерфейса, в частности панелями, дропдаунами и всплывающими окнами. Ключевым элементом является возможность задавать ориентацию панели относительно триггера или родительского контейнера. Это критично для построения удобного интерфейса и предотвращения перекрытия других элементов страницы.
В Radix UI для управления ориентацией чаще всего используется
компонент Popover, DropdownMenu или
Tooltip, который поддерживает свойства
side и align.
sideСвойство side определяет, с какой стороны триггера будет
отображаться панель. Доступные значения:
top — панель появляется над триггеромright — панель появляется справаbottom — панель появляется под триггеромleft — панель появляется слеваПример использования в Popover:
import * as Popover from '@radix-ui/react-popover';
<Popover.Root>
<Popover.Trigger>Открыть панель</Popover.Trigger>
<Popover.Content side="right">
Контент панели справа
</Popover.Content>
</Popover.Root>
При указании side="right" панель будет открываться
справа от кнопки-триггера.
alignСвойство align позволяет управлять выравниванием
панели относительно выбранной стороны триггера:
start — выравнивание по началу (левый край для
горизонтали, верхний край для вертикали)center — выравнивание по центруend — выравнивание по концу (правый край для
горизонтали, нижний край для вертикали)Пример:
<Popover.Content side="bottom" align="start">
Панель снизу с выравниванием по началу
</Popover.Content>
В комбинации side и align можно точно
позиционировать панель в сложных интерфейсах.
sideOffset и alignOffsetДля более тонкой настройки положения панели используются
sideOffset и alignOffset:
sideOffset — смещение панели от
триггера по оси выбранной стороныalignOffset — смещение по оси
выравниванияПример:
<Popover.Content side="bottom" align="center" sideOffset={10} alignOffset={-20}>
Смещенная панель
</Popover.Content>
Здесь панель будет смещена на 10 пикселей вниз от триггера и на 20 пикселей влево относительно центра.
Radix UI автоматически учитывает размеры окна и переставляет
панель, если она выходит за границы видимой области. Для этого
используется свойство collisionBoundary и метод
avoidCollisions:
<Popover.Content side="right" align="center" collisionBoundary="viewport">
Панель с учетом границ окна
</Popover.Content>
Это предотвращает ситуации, когда панель оказывается за пределами экрана на маленьких устройствах.
Принципы ориентации аналогичны и для других компонентов:
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
<DropdownMenu.Root>
<DropdownMenu.Trigger>Меню</DropdownMenu.Trigger>
<DropdownMenu.Content side="bottom" align="end">
<DropdownMenu.Item>Пункт 1</DropdownMenu.Item>
<DropdownMenu.Item>Пункт 2</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
В Tooltip тоже используется side и
align:
import * as Tooltip from '@radix-ui/react-tooltip';
<Tooltip.Root>
<Tooltip.Trigger>Наведи курсор</Tooltip.Trigger>
<Tooltip.Content side="top" align="center">
Подсказка сверху
</Tooltip.Content>
</Tooltip.Root>
side="right"
или side="left".side="bottom".align="center" обеспечивает симметрию и
аккуратный интерфейс.sideOffset и alignOffset
помогают избежать наложений на триггер или соседние элементы.Правильное использование ориентации панели обеспечивает удобство взаимодействия, предотвращает перекрытия и создает естественный пользовательский опыт при работе с динамическими элементами интерфейса в Radix UI.