Разделители — это вспомогательные элементы пользовательского интерфейса, используемые для визуального разграничения групп элементов. Они помогают структурировать контент, повышают читаемость интерфейса и улучшают навигацию внутри сложных компонентов.
В библиотеке Radix UI для этих задач используется компонент Separator, представляющий собой доступный и настраиваемый разделитель, который может располагаться как горизонтально, так и вертикально.
Разделитель не содержит бизнес-логики и не влияет на структуру данных приложения. Его задача — формировать визуальные границы между логическими блоками.
Основные области применения:
Библиотека Radix UI предоставляет компонент:
@radix-ui/react-separator
Он реализует:
Базовый импорт:
import * as Separator from "@radix-ui/react-separator";
Основной элемент:
<Separator.Root />
Этот элемент рендерит разделитель и принимает несколько параметров, позволяющих управлять его поведением.
Минимальный пример горизонтального разделителя:
import * as Separator from "@radix-ui/react-separator";
export default function Example() {
return (
<div>
<p>Раздел 1</p>
<Separator.Root />
<p>Раздел 2</p>
</div>
);
}
По умолчанию компонент имеет:
separatorОднако внешний вид полностью зависит от CSS.
Пример стилизации:
.separator {
background-color: #e5e5e5;
height: 1px;
width: 100%;
}
Использование:
<Separator.Root className="separator" />
Горизонтальный разделитель используется для отделения блоков, расположенных друг под другом.
Типичные сценарии:
<div className="container">
<div>Профиль</div>
<Separator.Root className="separator" />
<div>Настройки</div>
<Separator.Root className="separator" />
<div>Выход</div>
</div>
CSS:
.separator {
height: 1px;
width: 100%;
background: #ddd;
margin: 12px 0;
}
В результате элементы списка визуально делятся на отдельные блоки.
Вертикальные разделители используются внутри горизонтальных интерфейсов:
Для этого используется параметр orientation.
<Separator.Root orientation="vertical" />
Полный пример:
<div className="toolbar">
<button>Копировать</button>
<Separator.Root
orientation="vertical"
className="separatorVertical"
/>
<button>Вставить</button>
<Separator.Root
orientation="vertical"
className="separatorVertical"
/>
<button>Удалить</button>
</div>
CSS:
.toolbar {
display: flex;
align-items: center;
}
.separatorVertical {
width: 1px;
height: 20px;
background: #ddd;
margin: 0 8px;
}
Вертикальный разделитель становится частью горизонтальной компоновки элементов.
Параметр orientation управляет направлением
разделителя.
Поддерживаемые значения:
| Значение | Описание |
|---|---|
| horizontal | горизонтальный разделитель |
| vertical | вертикальный разделитель |
По умолчанию:
horizontal
Пример:
<Separator.Root orientation="vertical" />
Radix автоматически добавляет атрибут:
data-orientation="vertical"
Это позволяет удобно применять CSS-стили.
Пример:
[data-orientation="horizontal"] {
height: 1px;
width: 100%;
}
[data-orientation="vertical"] {
width: 1px;
height: 100%;
}
Иногда разделитель используется исключительно для визуального оформления и не должен участвовать в навигации экранных читалок.
Для этого применяется свойство:
decorative
Пример:
<Separator.Root decorative />
В этом режиме:
aria-hidden="true"separator не используетсяЭто особенно важно в интерфейсах с большим количеством декоративных линий.
Radix UI активно использует разделители внутри меню и выпадающих списков.
Пример структуры меню:
<div className="menu">
<div className="item">Новый файл</div>
<div className="item">Открыть</div>
<Separator.Root className="separator" />
<div className="item">Сохранить</div>
<div className="item">Сохранить как</div>
</div>
Разделитель отделяет логические группы команд.
CSS:
.separator {
height: 1px;
background: #eee;
margin: 6px 0;
}
Панели инструментов часто требуют визуального деления кнопок на функциональные группы.
Пример:
<div className="toolbar">
<button>B</button>
<button>I</button>
<button>U</button>
<Separator.Root
orientation="vertical"
className="separatorVertical"
/>
<button>Список</button>
<button>Цитата</button>
</div>
Разделитель помогает пользователю быстрее ориентироваться в панели.
Разделители могут менять ориентацию в зависимости от размера экрана.
Например:
Пример:
<Separator.Root
orientation={isMobile ? "horizontal" : "vertical"}
className="separator"
/>
CSS:
.separator {
background: #ddd;
}
[data-orientation="horizontal"] {
height: 1px;
width: 100%;
}
[data-orientation="vertical"] {
width: 1px;
height: 24px;
}
Разделители часто используются внутри flex-контейнеров.
Пример вертикального разделителя:
<div className="layout">
<aside>Навигация</aside>
<Separator.Root
orientation="vertical"
className="divider"
/>
<main>Контент</main>
</div>
CSS:
.layout {
display: flex;
}
.divider {
width: 1px;
background: #e5e5e5;
}
Такой подход позволяет разделять крупные части интерфейса.
Разделители также могут применяться внутри grid-систем.
Пример:
<div className="grid">
<div>Колонка 1</div>
<Separator.Root
orientation="vertical"
className="separatorVertical"
/>
<div>Колонка 2</div>
</div>
CSS:
.grid {
display: grid;
grid-template-columns: 1fr auto 1fr;
}
.separatorVertical {
width: 1px;
background: #ddd;
}
Разделитель занимает отдельную колонку сетки.
Separator поддерживает любые CSS-стили.
.separator {
border-top: 1px dashed #ccc;
}
.separator {
height: 1px;
background: linear-gradient(
to right,
transparent,
#ddd,
transparent
);
}
.separator {
height: 4px;
background: #333;
}
Разделители могут участвовать в анимациях интерфейса.
Пример появления:
.separator {
height: 1px;
background: #ddd;
transform: scaleX(0);
transition: transform 0.3s ease;
}
.container:hover .separator {
transform: scaleX(1);
}
Карточки интерфейса часто содержат несколько блоков информации.
Пример:
<div className="card">
<div className="header">Профиль</div>
<Separator.Root className="separator" />
<div className="content">
Информация о пользователе
</div>
<Separator.Root className="separator" />
<div className="footer">
Действия
</div>
</div>
CSS:
.separator {
height: 1px;
background: #f0f0f0;
margin: 10px 0;
}
Separator автоматически добавляет служебные атрибуты:
data-orientation="horizontal"
data-orientation="vertical"
Это облегчает стилизацию без дополнительной логики.
Пример:
[data-orientation="horizontal"] {
margin: 16px 0;
}
[data-orientation="vertical"] {
margin: 0 16px;
}
Использование разделителей должно быть умеренным.
Хорошие практики:
Плохие практики:
В крупных проектах часто создаётся собственный компонент-обёртка.
Пример:
import * as Separator from "@radix-ui/react-separator";
export function Divider(props) {
return (
<Separator.Root
className="divider"
{...props}
/>
);
}
Использование:
<Divider />
<Divider orientation="vertical" />
Это позволяет централизовать стили и настройки.
Separator хорошо вписывается в дизайн-системы благодаря:
Типичная токенизация:
.separator {
background: var(--border-color);
}
или
.separator {
background: var(--divider-color);
}
Это позволяет менять тему интерфейса без изменения компонентов.
Разделители являются частью визуальной иерархии интерфейса. Они помогают:
Компонент Separator из Radix UI обеспечивает правильную реализацию этого паттерна, сочетая доступность, гибкость и минимальную абстракцию.