Breadcrumb
Navigation breadcrumb trail showing the current page's location in the site hierarchy.
Quick Start
<%= kui(:breadcrumb) do %>
<%= kui(:breadcrumb, :list) do %>
<%= kui(:breadcrumb, :item) do %>
<%= kui(:breadcrumb, :link, href: "/") { "Home" } %>
<% end %>
<%= kui(:breadcrumb, :separator) %>
<%= kui(:breadcrumb, :item) do %>
<%= kui(:breadcrumb, :link, href: "/components") { "Components" } %>
<% end %>
<%= kui(:breadcrumb, :separator) %>
<%= kui(:breadcrumb, :item) do %>
<%= kui(:breadcrumb, :page) { "Breadcrumb" } %>
<% end %>
<% end %>
<% end %>
Locals
All sub-parts accept:
| Local | Type | Default |
|---|---|---|
css_classes: |
String | "" |
**component_options |
Hash | {} |
The link sub-part accepts any <a> attribute (e.g. href:, target:).
Sub-parts
| Part | Usage | HTML | Purpose |
|---|---|---|---|
:list |
kui(:breadcrumb, :list) |
<ol> |
Ordered list container |
:item |
kui(:breadcrumb, :item) |
<li> |
Segment wrapper |
:link |
kui(:breadcrumb, :link) |
<a> |
Clickable ancestor link |
:page |
kui(:breadcrumb, :page) |
<span> |
Current page (non-interactive) |
:separator |
kui(:breadcrumb, :separator) |
<li> |
Chevron divider (customizable) |
:ellipsis |
kui(:breadcrumb, :ellipsis) |
<span> |
Truncation indicator |
Anatomy
Breadcrumb (nav)
└── List (ol)
├── Item (li)
│ └── Link (a) or Page (span)
├── Separator (li)
├── Item (li)
│ └── Ellipsis (span)
├── Separator (li)
└── Item (li)
└── Page (span)
Usage
Default
The most common breadcrumb pattern: ancestor links followed by the current page.
<%= kui(:breadcrumb) do %>
<%= kui(:breadcrumb, :list) do %>
<%= kui(:breadcrumb, :item) do %>
<%= kui(:breadcrumb, :link, href: "/") { "Home" } %>
<% end %>
<%= kui(:breadcrumb, :separator) %>
<%= kui(:breadcrumb, :item) do %>
<%= kui(:breadcrumb, :link, href: "/components") { "Components" } %>
<% end %>
<%= kui(:breadcrumb, :separator) %>
<%= kui(:breadcrumb, :item) do %>
<%= kui(:breadcrumb, :page) { "Breadcrumb" } %>
<% end %>
<% end %>
<% end %>
With Ellipsis
Use the ellipsis sub-part to indicate truncated segments in deep hierarchies.
<%= kui(:breadcrumb, :item) do %>
<%= kui(:breadcrumb, :ellipsis) %>
<% end %>
Custom Separator
Pass a block to the separator sub-part to replace the default chevron icon.
<%= kui(:breadcrumb, :separator) do %>
<%= kiso_icon "slash", class: "size-3.5" %>
<% end %>
Theme
Kiso::Themes::Breadcrumb = ClassVariants.build(base: "")
Kiso::Themes::BreadcrumbList = ClassVariants.build(base: "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5")
Kiso::Themes::BreadcrumbItem = ClassVariants.build(base: "inline-flex items-center gap-1.5")
Kiso::Themes::BreadcrumbLink = ClassVariants.build(base: "hover:text-foreground transition-colors")
Kiso::Themes::BreadcrumbPage = ClassVariants.build(base: "text-foreground font-normal")
Kiso::Themes::BreadcrumbSeparator = ClassVariants.build(base: "[&>svg]:size-3.5")
Kiso::Themes::BreadcrumbEllipsis = ClassVariants.build(base: "flex size-9 items-center justify-center")
Accessibility
Breadcrumb renders a <nav> element with aria-label="breadcrumb". The list
uses a semantic <ol> for proper ordering. Separators have role="presentation"
and aria-hidden="true" so screen readers skip them. The current page has
aria-current="page" and aria-disabled="true".