Welcome to Vanilla Breeze
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
This bell pulls live notifications from /go/notify/messages — the same contract documented at /docs/concepts/service-contracts/. Static articles like this one are the no-JS / no-backend fallback.
Breadcrumb navigation helps users understand their location within a site hierarchy and provides quick access to parent pages. Built with semantic HTML and accessible by default.
Breadcrumbs use the semantic <nav> element with aria-label="Breadcrumb" and an ordered list (<ol>) to represent the hierarchical structure. The current page is marked with aria-current="page" and rendered as a <span> rather than a link.
Key features:
<nav> and <ol> for proper structurearia-current="page"A basic breadcrumb showing the page hierarchy. Uses the default slash separator. The current page is not a link to avoid self-referential navigation.
<nav class="breadcrumb" aria-label="Breadcrumb"> <ol> <li><a href="/">Home</a></li> <li><a href="/docs/">Documentation</a></li> <li><a href="/docs/patterns/">Patterns</a></li> <li><span aria-current="page">Breadcrumb</span></li> </ol></nav>
Replace the "Home" text with an icon for a more compact design. Include visually-hidden text for screen reader accessibility.
<nav class="breadcrumb" aria-label="Breadcrumb"> <ol> <li> <a href="/"> <icon-wc name="home" size="sm" aria-hidden="true"></icon-wc> <span class="visually-hidden">Home</span> </a> </li> <li><a href="/docs/">Documentation</a></li> <li><a href="/docs/patterns/">Patterns</a></li> <li><span aria-current="page">Breadcrumb</span></li> </ol></nav>
When the breadcrumb trail is long, use data-collapsed to hide middle items. This shows only the first item, an ellipsis indicator, and the last two items.
<nav class="breadcrumb" data-collapsed aria-label="Breadcrumb"> <ol> <li><a href="/">Home</a></li> <li><a href="/docs/">Documentation</a></li> <li><a href="/docs/elements/">Elements</a></li> <li><a href="/docs/elements/nav/">Navigation</a></li> <li><a href="/docs/patterns/">Patterns</a></li> <li><span aria-current="page">Breadcrumb</span></li> </ol></nav>
Use data-separator to change the separator character. Available options: chevron, arrow, dot, pipe.
<nav class="breadcrumb" data-separator="chevron" aria-label="Breadcrumb"> <ol> <li><a href="/">Home</a></li> <li><a href="/docs/">Documentation</a></li> <li><span aria-current="page">Patterns</span></li> </ol></nav>
<nav class="breadcrumb" data-separator="arrow" aria-label="Breadcrumb"> <ol> <li><a href="/">Home</a></li> <li><a href="/docs/">Documentation</a></li> <li><span aria-current="page">Patterns</span></li> </ol></nav>
For breadcrumb items with long labels, use data-truncated to limit width and show ellipsis.
<nav class="breadcrumb" aria-label="Breadcrumb"> <ol> <li><a href="/">Home</a></li> <li><a href="/products/" data-truncated>Very Long Category Name That Needs Truncation</a></li> <li><span aria-current="page">Product</span></li> </ol></nav>
The breadcrumb styles are included in Vanilla Breeze. Here is the CSS for reference:
/* Breadcrumb base styles (included in VB) */nav.breadcrumb > ol { display: flex; flex-wrap: wrap; align-items: center; gap: var(--size-2xs); font-size: var(--font-size-sm);} nav.breadcrumb li { display: flex; align-items: center; gap: var(--size-2xs);} /* Separator (CSS-generated) */nav.breadcrumb li:not(:last-child)::after { content: var(--_separator, "/"); margin-inline-start: var(--size-2xs); color: var(--color-gray-400);} /* Links and current page */nav.breadcrumb a,nav.breadcrumb span { padding: var(--size-xs); color: var(--color-text-muted); text-decoration: none;} nav.breadcrumb a:hover { color: var(--color-text); text-decoration: underline;} nav.breadcrumb [aria-current="page"] { color: var(--color-text); font-weight: var(--font-weight-medium);}
/* Separator variants */nav.breadcrumb[data-separator="chevron"] { --_separator: "\\203A"; /* › */} nav.breadcrumb[data-separator="arrow"] { --_separator: "\\2192"; /* → */} nav.breadcrumb[data-separator="dot"] { --_separator: "\\00B7"; /* · */} nav.breadcrumb[data-separator="pipe"] { --_separator: "|";}
/* Collapsed breadcrumb (CSS-only) */nav.breadcrumb[data-collapsed] li:not(:first-child):not(:last-child):not(:nth-last-child(2)) { display: none;} nav.breadcrumb[data-collapsed] li:nth-last-child(2)::before { content: "..."; margin-inline-end: var(--size-2xs); color: var(--color-gray-400);} /* Truncated items */nav.breadcrumb [data-truncated] { max-width: 10rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
<nav> with aria-label="Breadcrumb" to identify the navigation purpose<ol> to convey hierarchical order to screen readersaria-current="page" and use a <span> instead of a linkFull documentation for the nav element including all breadcrumb variants
Header navigation patterns with dropdowns and mobile menus
Icon web component for home icon and other breadcrumb icons
Screen reader only text utility