Breadcrumb
Цепочка ссылок от корня сайта до текущей страницы.
- Браузеры
- Chrome 123+, Firefox 121+, Safari 17.5+
- Уровень
- 0
- Сжатый размер
- 1.12 kB
- Лимит принудительной компоновки
- 0 ms
- Лимит axe
- 0
- Совместим с SSR
- Да
- На основе
- elements/details
- Публичный контракт
- Тестовый стенд
Песочница
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
import { Breadcrumb } from "@gunkin/uiify";
export default function Example() {
return (
<Breadcrumb.Root className="">
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">Home</Breadcrumb.Link>
<Breadcrumb.Separator />
</Breadcrumb.Item>
<Breadcrumb.Item>
<Breadcrumb.Link current>Components</Breadcrumb.Link>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
@layer components {
[data-uiify-breadcrumb] [data-part="list"] {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
list-style: none;
padding: 0;
margin: 0;
}
[data-uiify-breadcrumb] [data-part="item"] {
display: flex;
align-items: center;
gap: 0.5rem;
}
[data-uiify-breadcrumb] [data-part="link"] {
color: var(--primary);
text-decoration: none;
}
[data-uiify-breadcrumb] [data-part="link"]:hover {
text-decoration: underline;
}
[data-uiify-breadcrumb] [aria-hidden="true"] {
color: var(--muted-foreground);
}
[data-uiify-breadcrumb] [data-current] {
color: var(--foreground);
font-weight: 600;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
import { Breadcrumb } from "@gunkin/uiify";
export default function Example() {
return (
<Breadcrumb.Root
className="
[&_[data-part=list]]:flex [&_[data-part=list]]:flex-wrap [&_[data-part=list]]:items-center
[&_[data-part=list]]:[gap:0.5rem] [&_[data-part=list]]:list-none [&_[data-part=list]]:p-0
[&_[data-part=list]]:m-0 [&_[data-part=item]]:flex [&_[data-part=item]]:items-center
[&_[data-part=item]]:[gap:0.5rem] [&_[data-part=link]:where(:not([data-current]))]:text-primary
[&_[data-part=link]]:no-underline [&_[data-part=link]:hover]:underline
[&_[aria-hidden=true]]:text-muted-foreground [&_[data-current]]:text-foreground
[&_[data-current]]:[font-weight:600]
"
>
<Breadcrumb.List>
<Breadcrumb.Item>
<Breadcrumb.Link href="/">Home</Breadcrumb.Link>
<Breadcrumb.Separator />
</Breadcrumb.Item>
<Breadcrumb.Item>
<Breadcrumb.Link current>Components</Breadcrumb.Link>
</Breadcrumb.Item>
</Breadcrumb.List>
</Breadcrumb.Root>
);
}
API
Breadcrumb.Root
aria-label | string | "Breadcrumb" | Доступное название навигационной области. |
render | ReactElement | ((props, state) => ReactElement) | — | Заменяет отображаемый элемент, сохраняя поведение и связи доступности. |
Breadcrumb.List
children | ReactNode | — | Вручную заданные пункты навигационной цепочки как альтернатива items. |
items | BreadcrumbItemData[] | — | Записи из данных: у каждой есть key, label, необязательные href и флаг current; обязательны при заданном maxItems. |
itemsAfterCollapse | number | 1 | Число последних пунктов, остающихся видимыми при свёрнутой цепочке. |
itemsBeforeCollapse | number | 1 | Число первых пунктов, остающихся видимыми при свёрнутой цепочке. |
maxItems | number | — | Число пунктов, при превышении которого середина цепочки скрывается за раскрываемым многоточием. |
separator | ReactNode | — | Содержимое между пунктами, если список строится из items. |
render | ReactElement | ((props, state) => ReactElement) | — | Заменяет отображаемый элемент, сохраняя поведение и связи доступности. |
Breadcrumb.Item
children | ReactNode | — | Содержимое одного пункта навигационной цепочки. |
render | ReactElement | ((props, state) => ReactElement) | — | Заменяет отображаемый элемент, сохраняя поведение и связи доступности. |
Breadcrumb.Link
children | ReactNode | — | Подпись ссылки. |
current | boolean | false | Помечает запись текущей страницей и задаёт ей aria-current. |
href | string | — | Адрес ссылки; не задавайте, чтобы отобразить пункт без перехода. |
render | ReactElement | ((props, state) => ReactElement) | — | Заменяет отображаемый элемент, сохраняя поведение и связи доступности. |
Breadcrumb.Separator
children | ReactNode | "/" | Содержимое разделителя, скрытое от вспомогательных технологий. |
render | ReactElement | ((props, state) => ReactElement) | — | Заменяет отображаемый элемент, сохраняя поведение и связи доступности. |
Клавиатура
| Клавиша | Действие |
|---|
| Tab | Перевести фокус на элемент управления или с него |
| Enter / Space | Активировать при наличии фокуса (для элементов управления типа кнопки) |
Доступность
По возможности используется семантический HTML. Изучите разметку в песочнице: ARIA добавляется только там, где нативных элементов недостаточно.
Привязка стилей
data-disabled