Navigation breadcrumb component that shows the current page's location within a navigational hierarchy with full accessibility support.
- π§ Navigation Hierarchy - Clear path indication for complex navigation
- βΏ Accessibility First - ARIA compliant with screen reader support
- π¨ Customizable Separators - Choose from various separator styles
- π± Responsive Design - Works seamlessly on all screen sizes
- π Link Integration - Full Angular Router support
- π Ellipsis Support - Truncation for long breadcrumb trails
- π§ TypeScript - Complete type safety
Initialize Angular SuperUI in your project:
ngsui-cli initAdd the Breadcrumb component:
ngsui-cli add breadcrumbimport {
BreadcrumbComponent,
BreadcrumbListComponent,
BreadcrumbItemComponent,
BreadcrumbLinkComponent,
BreadcrumbPageComponent,
BreadcrumbSeparatorComponent,
BreadcrumbEllipsisComponent
} from '@components/breadcrumb';@Component({
template: `
<Breadcrumb [accessibility]="{
ariaLabel: 'Navigation breadcrumb',
ariaLive: 'polite'
}">
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/" [accessibility]="{
ariaLabel: 'Navigate to home page'
}">
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink href="/docs" [accessibility]="{
ariaLabel: 'Navigate to documentation'
}">
Documentation
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage [accessibility]="{
ariaLabel: 'Current page: Components'
}">
Components
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
`
})
export class BasicExample {}@Component({
template: `
<Breadcrumb [accessibility]="{
ariaLabel: 'Custom separator breadcrumb'
}">
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/">
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator [customSeparator]="true">
<span class="text-muted-foreground">/</span>
</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink href="/products">
Products
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator [customSeparator]="true">
<span class="text-muted-foreground">/</span>
</BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>
Laptops
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
`
})
export class CustomSeparatorExample {}@Component({
template: `
<Breadcrumb [accessibility]="{
ariaLabel: 'Collapsed navigation breadcrumb'
}">
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink href="/">
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbEllipsis></BreadcrumbEllipsis>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink href="/components">
Components
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>
Breadcrumb
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
`
})
export class CollapsedExample {}@Component({
template: `
<Breadcrumb [accessibility]="{
ariaLabel: 'Interactive breadcrumb navigation'
}">
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink
(linkClick)="onBreadcrumbClick('home')"
[accessibility]="{
ariaLabel: 'Click to navigate to home'
}">
π Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink
(linkClick)="onBreadcrumbClick('settings')"
[accessibility]="{
ariaLabel: 'Click to navigate to settings'
}">
βοΈ Settings
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>
Profile
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
`
})
export class InteractiveExample {
onBreadcrumbClick(section: string) {
console.log(`Navigating to: ${section}`);
}
}@Component({
template: `
<Breadcrumb [accessibility]="{
ariaLabel: 'Router navigation breadcrumb'
}">
<BreadcrumbList>
<BreadcrumbItem>
<BreadcrumbLink routerLink="/">
Home
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbLink routerLink="/dashboard">
Dashboard
</BreadcrumbLink>
</BreadcrumbItem>
<BreadcrumbSeparator></BreadcrumbSeparator>
<BreadcrumbItem>
<BreadcrumbPage>
Analytics
</BreadcrumbPage>
</BreadcrumbItem>
</BreadcrumbList>
</Breadcrumb>
`
})
export class RouterExample {}The root container for the breadcrumb navigation.
| Property | Type | Default | Description |
|---|---|---|---|
class |
string |
'' |
Additional CSS classes |
accessibility |
BreadcrumbAccessibility |
{ ariaLabel: 'breadcrumb', ariaLive: 'polite' } |
Accessibility configuration |
The ordered list container for breadcrumb items.
| Property | Type | Default | Description |
|---|---|---|---|
class |
string |
'' |
Additional CSS classes |
Individual breadcrumb items.
| Property | Type | Default | Description |
|---|---|---|---|
class |
string |
'' |
Additional CSS classes |
Clickable breadcrumb links with multiple navigation options.
| Property | Type | Default | Description |
|---|---|---|---|
href |
string |
undefined |
Regular URL for navigation |
routerLink |
string | string[] |
undefined |
Angular router link |
target |
'_blank' | '_self' | '_parent' | '_top' |
undefined |
Link target |
rel |
string |
undefined |
Link relationship |
asChild |
boolean |
false |
Render as child element |
class |
string |
'' |
Additional CSS classes |
accessibility |
{ ariaLabel?: string; ariaDescribedBy?: string } |
{} |
Accessibility configuration |
| Event | Type | Description |
|---|---|---|
linkClick |
EventEmitter<MouseEvent> |
Emitted when link is clicked |
linkKeyDown |
EventEmitter<KeyboardEvent> |
Emitted on keydown events |
Represents the current page (non-clickable).
| Property | Type | Default | Description |
|---|---|---|---|
current |
boolean |
true |
Whether this is the current page |
class |
string |
'' |
Additional CSS classes |
accessibility |
{ ariaLabel?: string } |
{} |
Accessibility configuration |
Visual separator between breadcrumb items.
| Property | Type | Default | Description |
|---|---|---|---|
customSeparator |
boolean |
false |
Use custom separator content |
class |
string |
'' |
Additional CSS classes |
Ellipsis indicator for collapsed breadcrumbs.
| Property | Type | Default | Description |
|---|---|---|---|
customEllipsis |
boolean |
false |
Use custom ellipsis content |
class |
string |
'' |
Additional CSS classes |
The Breadcrumb component is fully accessible and follows WAI-ARIA guidelines:
- Navigation Landmark: Uses
<nav>withrole="navigation" - Structured List: Implements proper
<ol>and<li>structure - Current Page: Uses
aria-current="page"for the current page - Screen Reader Support: Provides descriptive ARIA labels
- Keyboard Navigation: Full keyboard support with focus management
- Live Regions: Optional live region announcements
aria-label: Describes the breadcrumb navigationaria-current="page": Indicates the current pagearia-live: Live region for dynamic updatesaria-hidden: Hides decorative elements from screen readersrole="presentation": Removes semantic meaning from separators
- Tab: Navigate between focusable elements
- Enter: Activate links and buttons
- Space: Activate buttons (for interactive breadcrumbs)
- Keep it Simple: Don't include too many levels (typically 3-7 items)
- Use Meaningful Labels: Provide clear, descriptive text for each level
- Current Page: Always indicate the current page clearly
- Mobile Responsive: Consider collapsing on smaller screens
- Consistent Styling: Maintain visual hierarchy and consistency
The component uses Tailwind CSS classes and CVA for styling:
// Base classes
const breadcrumbVariants = cva(
'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground'
);
// Link hover states
const breadcrumbLinkVariants = cva([
'transition-colors hover:text-foreground',
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring'
]);Find more examples and use cases in our GitHub repository.