Breadcrumb
A neo-brutalist breadcrumb navigation component built on Reka UI's breadcrumb primitives, suitable for displaying multi-level page trees, especially as a standard navigation element in complex nested scenarios such as admin dashboards.
Default links render as solid labels with a full border, background, and hard shadow. Hover changes the background; pressing moves the text and border together toward the shadow and hides it. The current page uses an accent fill with a smaller hard shadow. The folder variant retains its open-bottom tab appearance and flat surface, with background feedback on hover.
Demo
Installation
pnpm dlx brutx-vue@latest add breadcrumbUsage
<script setup>
import {
Breadcrumb,
BreadcrumbList,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbPage,
BreadcrumbSeparator,
BreadcrumbEllipsis
} from 'brutx-ui-vue'
</script>
<template>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbLink href="/components">Components</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Breadcrumb</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</template>Collapsed Ellipsis
When there are many page levels, use BreadcrumbEllipsis to collapse less important intermediate pages. It is a purely presentational ellipsis indicator (role="presentation", no interactive semantics); wrap it with a DropdownMenu or similar trigger if click-to-expand behavior is needed.
<template>
<Breadcrumb>
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="#">Home</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<!-- Collapsed ellipsis indicator (presentational, non-interactive) -->
<BreadcrumbEllipsis />
</BreadcrumbItem>
<BreadcrumbSeparator />
<BreadcrumbItem>
<BreadcrumbPage>Current Page</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
</template>Sub-components
| Component | Description |
|---|---|
Breadcrumb | Root container |
BreadcrumbList | Breadcrumb list container |
BreadcrumbItem | Single breadcrumb item container |
BreadcrumbLink | Clickable link item |
BreadcrumbPage | Current page indicator (non-clickable) |
BreadcrumbSeparator | Separator, renders a forward slash / by default |
BreadcrumbEllipsis | Ellipsis indicator (presentational) for collapsing intermediate levels |
API Reference
Breadcrumb
| Name | Type | Default | Description |
|---|---|---|---|
class | string | undefined | undefined | CSS classes added to the breadcrumb navigation <nav> root. |
DetailsDeclared typestring | undefined Default value details
Sourcepackages/ui/src/components/breadcrumb/Breadcrumb.vue | |||
| Name | Signature or type | Description |
|---|---|---|
#default | {} | Breadcrumb navigation children, usually containing BreadcrumbList. |
DetailsDeclared type{}Sourcepackages/ui/src/components/breadcrumb/Breadcrumb.vue | ||
BreadcrumbEllipsis
| Name | Type | Default | Description |
|---|---|---|---|
class | string | undefined | undefined | CSS classes added to the ellipsis presentation element. |
DetailsDeclared typestring | undefined Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbEllipsis.vue | |||
iconSize | IconSize | undefined | "md" | The size of the default ellipsis icon, using the project IconSize presets. |
DetailsDeclared typeIconSize | undefined Literal values
Referenced types IconSize Type definition — IconSizeexport type IconSize = NonNullable<VariantProps<typeof iconSizeVariants>['size']> Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbEllipsis.vue | |||
| Name | Signature or type | Description |
|---|---|---|
#default | {} | Replaces the default MoreHorizontal icon; custom content should provide an appropriate accessible name. |
DetailsDeclared type{}Sourcepackages/ui/src/components/breadcrumb/BreadcrumbEllipsis.vue | ||
BreadcrumbItem
| Name | Type | Default | Description |
|---|---|---|---|
class | string | undefined | undefined | CSS classes added to the <li> element for one breadcrumb item. |
DetailsDeclared typestring | undefined Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbItem.vue | |||
| Name | Signature or type | Description |
|---|---|---|
#default | {} | One breadcrumb item, usually a link or the current page. |
DetailsDeclared type{}Sourcepackages/ui/src/components/breadcrumb/BreadcrumbItem.vue | ||
BreadcrumbLink
| Name | Type | Default | Description |
|---|---|---|---|
class | string | undefined | undefined | CSS classes added to the link or to the child element composed through asChild. |
DetailsDeclared typestring | undefined Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbLink.vue | |||
asChild | boolean | undefined | false | Uses the Reka UI Primitive child-composition pattern to merge this component’s props and behavior into its single child. |
DetailsDeclared typeboolean | undefined Literal values
Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbLink.vue | |||
as | AsTag | Component | undefined | "a" | Selects the HTML tag or component used for the link; the child determines the rendered target when asChild is enabled. |
DetailsDeclared typeAsTag | Component | undefined Literal values
Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbLink.vue | |||
| Name | Signature or type | Description |
|---|---|---|
#default | {} | The visible link text or content. |
DetailsDeclared type{}Sourcepackages/ui/src/components/breadcrumb/BreadcrumbLink.vue | ||
BreadcrumbList
| Name | Type | Default | Description |
|---|---|---|---|
class | string | undefined | undefined | CSS classes added to the ordered list <ol>. |
DetailsDeclared typestring | undefined Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbList.vue | |||
variant | "default" | "folder" | undefined | "default" | default uses the regular list style; folder renders links as folder-tab labels. |
DetailsDeclared type"default" | "folder" | undefined Literal values
Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbList.vue | |||
| Name | Signature or type | Description |
|---|---|---|
#default | {} | Breadcrumb items and separators; children should use list-item components valid inside an ordered list. |
DetailsDeclared type{}Sourcepackages/ui/src/components/breadcrumb/BreadcrumbList.vue | ||
BreadcrumbPage
| Name | Type | Default | Description |
|---|---|---|---|
class | string | undefined | undefined | CSS classes added to the current-page <span>. |
DetailsDeclared typestring | undefined Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbPage.vue | |||
| Name | Signature or type | Description |
|---|---|---|
#default | {} | The current page label. The component marks it with aria-current="page" and does not render it as a link. |
DetailsDeclared type{}Sourcepackages/ui/src/components/breadcrumb/BreadcrumbPage.vue | ||
BreadcrumbSeparator
| Name | Type | Default | Description |
|---|---|---|---|
class | string | undefined | undefined | CSS classes added to the separator list item. |
DetailsDeclared typestring | undefined Default value details
Sourcepackages/ui/src/components/breadcrumb/BreadcrumbSeparator.vue | |||
| Name | Signature or type | Description |
|---|---|---|
#default | {} | Custom separator content; a forward slash / is shown when omitted. The separator is hidden from the accessibility tree. |
DetailsDeclared type{}Sourcepackages/ui/src/components/breadcrumb/BreadcrumbSeparator.vue | ||
Accessibility
- Keyboard operation: Link items support
Tabkey navigation andEnterkey activation - ARIA attributes: Automatically adds
aria-label="Breadcrumb"to the navigation container andaria-current="page"to identify the current page - Semantic structure: Wrapped in a
<nav>element with an<ol>list structure conforming to the WAI-ARIA breadcrumb specification