Root является фундаментальным контейнером для многих компонентов Radix UI. Он определяет область, в рамках которой будут работать вложенные элементы, обеспечивая корректное позиционирование, управление состояниями и событиями. В большинстве случаев Root используется как обёртка для интерактивных компонентов, таких как ScrollArea, Dialog или Popover.
import * as ScrollArea from '@radix-ui/react-scroll-area';
<ScrollArea.Root>
<ScrollArea.Viewport>
{/* Контент с прокруткой */}
</ScrollArea.Viewport>
<ScrollArea.Scrollbar orientation="vertical">
<ScrollArea.Thumb />
</ScrollArea.Scrollbar>
</ScrollArea.Root>
Ключевые моменты Root:
Viewport представляет собой видимую область контента, который можно прокручивать. Этот компонент управляет отображением содержимого внутри Root и определяет размеры области, доступной пользователю.
Особенности Viewport:
Пример использования Viewport с фиксированными размерами:
<ScrollArea.Root>
<ScrollArea.Viewport style={{ width: 300, height: 200 }}>
<div style={{ height: 600 }}>
Длинный контент, который требует прокрутки
</div>
</ScrollArea.Viewport>
</ScrollArea.Root>
При этом Viewport автоматически создаёт точку отсчёта для Scrollbar и Thumb, не требуя ручного управления позициями.
Scrollbar — это полоса прокрутки, визуальный элемент, который показывает текущую позицию внутри Viewport. Radix UI предоставляет Scrollbar как полностью управляемый компонент с ориентацией (vertical или horizontal), возможностью кастомизации и доступностью для клавиатурного управления.
Thumb — это ползунок внутри Scrollbar, который указывает на текущую позицию прокрутки. Он автоматически синхронизируется с Viewport, меняя размеры и положение в зависимости от содержимого.
Пример вертикальной прокрутки:
<ScrollArea.Scrollbar orientation="vertical" style={{ width: 10, background: '#f0f0f0' }}>
<ScrollArea.Thumb style={{ background: '#888', borderRadius: 5 }} />
</ScrollArea.Scrollbar>
Ключевые возможности Scrollbar и Thumb:
Правильное использование этих трёх компонентов создаёт полностью управляемую систему прокрутки:
Эта архитектура обеспечивает:
Использование всех трёх компонентов совместно позволяет создавать прокручиваемые контейнеры, полностью соответствующие современным требованиям UX и доступности.