Radix UI предоставляет компоненты с высокой степенью кастомизации и поддержкой доступности (accessibility), среди которых особенно важны компоненты Dropdown Menu, Select, RadioGroup и CheckboxGroup, где ориентация элементов списка играет ключевую роль для пользовательского взаимодействия и UX. Ориентация списка определяет, как элементы будут располагаться: вертикально или горизонтально, а также влияет на навигацию с клавиатуры и взаимодействие с экранными считывателями.
Компоненты Radix UI используют проп
orientation, который принимает два
значения:
orientation="vertical" // стандартное вертикальное расположение
orientation="horizontal" // элементы располагаются в ряд
Пример использования в компоненте DropdownMenu:
import * as DropdownMenu from '@radix-ui/react-dropdown-menu';
<DropdownMenu.Root>
<DropdownMenu.Trigger>Меню</DropdownMenu.Trigger>
<DropdownMenu.Content orientation="vertical">
<DropdownMenu.Item>Элемент 1</DropdownMenu.Item>
<DropdownMenu.Item>Элемент 2</DropdownMenu.Item>
<DropdownMenu.Item>Элемент 3</DropdownMenu.Item>
</DropdownMenu.Content>
</DropdownMenu.Root>
Radix UI автоматически обрабатывает клавиатурные события для компонентов с ориентацией:
Пример использования с RadioGroup:
import * as RadioGroup from '@radix-ui/react-radio-group';
<RadioGroup.Root orientation="horizontal" defaultValue="option1">
<RadioGroup.Item value="option1">Вариант 1</RadioGroup.Item>
<RadioGroup.Item value="option2">Вариант 2</RadioGroup.Item>
<RadioGroup.Item value="option3">Вариант 3</RadioGroup.Item>
</RadioGroup.Root>
Каждому компоненту с ориентацией автоматически присваиваются корректные ARIA-атрибуты:
role="menu" и aria-orientation="vertical"
для вертикальных меню.role="toolbar" и
aria-orientation="horizontal" для горизонтальных групп
кнопок.RadioGroup или CheckboxGroup атрибут
aria-orientation помогает экранным считывателям правильно
объявлять направление элементов списка.Это обеспечивает совместимость с WCAG и гарантирует, что пользователи с ограниченными возможностями смогут эффективно взаимодействовать с интерфейсом.
Radix UI оставляет стилизацию полностью на разработчика. Ориентация часто сочетается с Flexbox или CSS Grid, чтобы визуально подчеркнуть выбранный поток элементов.
Пример вертикальной и горизонтальной стилизации через Flexbox:
.vertical-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.horizontal-list {
display: flex;
flex-direction: row;
gap: 12px;
}
<DropdownMenu.Content className="vertical-list">
<DropdownMenu.Item>Элемент 1</DropdownMenu.Item>
<DropdownMenu.Item>Элемент 2</DropdownMenu.Item>
</DropdownMenu.Content>
<RadioGroup.Root className="horizontal-list">
<RadioGroup.Item value="a">A</RadioGroup.Item>
<RadioGroup.Item value="b">B</RadioGroup.Item>
</RadioGroup.Root>
Radix UI позволяет менять ориентацию на лету, используя состояние React:
const [orientation, setOrientation] = React.useState('vertical');
<DropdownMenu.Content orientation={orientation}>
<DropdownMenu.Item>Элемент 1</DropdownMenu.Item>
<DropdownMenu.Item>Элемент 2</DropdownMenu.Item>
</DropdownMenu.Content>
<button onCl ick={() => setOrientation('horizontal')}>Сделать горизонтальным</button>
Такой подход особенно полезен при адаптивном дизайне, когда на мобильных устройствах вертикальные списки удобнее, а на широких экранах можно использовать горизонтальное расположение элементов.
Ориентация в Radix UI — это не просто визуальный аспект, но и ключевой элемент навигации и доступности, который позволяет создавать интерфейсы с высоким уровнем удобства и инклюзивности.