Radix UI предоставляет готовые, доступные и гибкие компоненты для
реализации скроллинга, которые позволяют управлять как горизонтальной,
так и вертикальной прокруткой контента. Основные компоненты для скролла
включают ScrollArea, ScrollBar,
ScrollThumb, а также вспомогательные элементы для настройки
поведения и стилей.
ScrollAreaScrollArea является контейнером для скроллируемого
содержимого. Он управляет прокруткой автоматически и предоставляет API
для кастомизации полосы прокрутки и области видимости.
import * as ScrollArea from '@radix-ui/react-scroll-area';
{/* Длинный контент для демонстрации скролла */}
Ключевые моменты:
Root — корневой элемент, контролирующий поведение
скролла. Атрибут type может быть auto,
always или scroll.Viewport — видимая область контента.Scrollbar — полоса прокрутки, может иметь ориентацию
vertical или horizontal.Thumb — ползунок на полосе прокрутки, который можно
стилизовать отдельно.Горизонтальный скролл задается через свойство
orientation="horizontal" у Scrollbar. Контент
внутри Viewport должен иметь ширину, превышающую ширину
контейнера, чтобы скролл был активен.
Особенности горизонтального скролла:
Thumb и
Scrollbar, включая цвет, скругления и эффекты при
наведении.Вертикальный скролл — более стандартный сценарий. Он задается по
умолчанию через orientation="vertical" или просто не
указывая ориентацию.
Особенности вертикального скролла:
Thumb автоматически рассчитывается исходя из
соотношения видимой области и общей высоты контента.scroll-behavior: smooth.Radix UI оставляет полную свободу в стилизации. Например, можно
сделать Thumb с плавным эффектом изменения цвета при
наведении:
.scrollbar-thumb {
background-color: rgba(100, 100, 255, 0.5);
border-radius: 4px;
transition: background-color 0.2s;
}
.scrollbar-thumb:hover {
background-color: rgba(100, 100, 255, 0.8);
}
Radix UI поддерживает одновременное использование горизонтального и
вертикального скролла. Для этого достаточно добавить оба
Scrollbar внутри одного ScrollArea.Root:
{/* Контент, превышающий размеры контейнера */}
ScrollArea.Root позволяет управлять видимостью полос
прокрутки через атрибут type:
auto — полосы видны только при необходимости.always — полосы всегда видны.scroll — полосы появляются только во время
прокрутки.Также доступна настройка scrollHideDelay для плавного
скрытия полос после завершения прокрутки.
Radix UI совместим с нативными методами прокрутки. Для программного
управления можно использовать ref на
Viewport:
const viewportRef = useRef(null);
const scrollToBottom = () => {
viewportRef.current.scrollTo({ top: viewportRef.current.scrollHeight, beh * avior: 'smooth' });
};
Длинный контент
Все компоненты Radix UI спроектированы с учетом доступности:
Эта особенность делает библиотеку идеальной для интерфейсов, где скролл является важной частью UX и должен быть доступен для всех пользователей.