Breadcrumb
Navigation
A breadcrumb shows where the current page sits in the site hierarchy, from the home page down to the page itself, and links back to each parent page.
- CSS
Maintained by Platform
Usable — may still change
A breadcrumb is a list of links showing where the current page sits in the site hierarchy, from the home page down to the page itself. It helps users understand where they are relative to the site’s information architecture, and lets them jump straight back to any parent level.
Anatomy
Section titled “Anatomy”- Breadcrumb bar
- Home link
- Ellipsis button
- Parent link
- Current page
Every level is a list item, and every item except the last ends in a chevron separator. Screen readers skip the separators — the list already tells assistive technology the order of the levels.
The trail always starts at Home, shown as an icon, and always ends at the current page, shown as heavier plain text rather than a link. Everything between is a parent page, drawn as a neutral link. When the trail is collapsed, the ellipsis button stands in for the hidden levels until the user opens it.
When to use it
Section titled “When to use it”Use a breadcrumb when users need to understand where they are in a hierarchy of three or more levels and benefit from jumping directly to a higher level.
Use a breadcrumb when:
- The hierarchy is three or more levels deep.
- Users arrive from many entry points and need context on where they have landed.
- The site has a large catalogue or content spread over many categories.
- Users need to compare their position across branches of the hierarchy.
- Search engines and assistive technology benefit from understanding the site’s structure.
Avoid a breadcrumb when:
- The flow is transactional or a form — use a Stepper instead.
- It would act as primary wayfinding — a breadcrumb sits under the main navigation, never in place of it.
- The page is a landing page or campaign content outside the permanent navigation.
- The hierarchy is only one or two levels deep, which makes the trail redundant.
- The content lives inside a modal or overlay.
- The page is a system screen, such as a 404 or an error page.
Properties
Section titled “Properties”Home
The first level is always Home, shown as a home icon in a borderless Icon Button rather than a text label. The icon is sm on mobile and md from tablet up, and stays visible in both the expanded and the collapsed desktop trail.
Parent links
Every level between Home and the current page is a neutral Link. Links are lg on mobile, for an easier tap target, and md from tablet up.
Current page
The last level names the page the user is on. It is plain text in body 6 heavy, never a link, so it reads as visually distinct from the levels before it.
Separator
A chevron sits after every level except the last, pointing towards the current page. It flips in right-to-left layouts.
Expanded
Every level is visible. When the trail is longer than the bar, it wraps onto further lines instead of scrolling or truncating.
Collapsed
Intermediate levels are hidden behind the ellipsis button. On desktop the trail keeps Home, the ellipsis, the immediate parent and the current page; on mobile it keeps only the ellipsis and the current page. Activating the ellipsis expands the trail in place.
Platform considerations
Section titled “Platform considerations”Desktop
The bar is at least 56px tall with 40px of horizontal padding. Show the expanded trail by default; collapse it when a deep hierarchy would wrap onto several lines.
Tablet
Tablet follows the desktop layout: the same padding, the same Home icon and the same link size.
Mobile
Use the collapsed trail by default. The bar is at least 48px tall with 16px of horizontal padding, and the collapsed trail shows only the ellipsis and the current page. Expanded, the trail wraps across as many lines as it needs.
Best practices
Section titled “Best practices”Place the breadcrumb directly below the main navigation, at the top of the page content it describes.
Do
Start every trail at Home and end it at the current page. Mirror the site’s real hierarchy rather than the path the user happened to take. Keep the current page as plain text, and collapse long trails on mobile so the bar stays a single line until the user asks for more.
Don't
Don’t use a breadcrumb for step-by-step flows, as the only way to navigate, or on pages outside the site hierarchy. Don’t link the current page, skip levels or use a separator other than the chevron.
Content guidelines
Section titled “Content guidelines”Use the shortest label that still makes the concept clear — a noun phrase, without articles, filler words or verbs. Keep labels to 32 characters including spaces; when a page title is longer, shorten it while keeping the two or three words that carry its meaning. Always call the first level “Home”. Don’t use punctuation such as full stops or colons; ampersands are fine.
A breadcrumb is three parts: the bar (.tng-breadcrumb, a labelled <nav>), the trail (.tng-breadcrumb-list, an <ol>) and its items (.tng-breadcrumb-item). The bar paints the surface, bottom border and padding; the trail lays the items out in a row that wraps; every item except the current page ends in a tng-icon icon-chevron-right separator with aria-hidden="true". Parent pages are tng-link is-neutral links, the current page is a tng-text-body is-6 is-heavy span carrying aria-current="page", and the home link is an is-no-bg icon button in a .tng-breadcrumb-item.is-home. Links switch from the large to the medium link size, and the bar from 16px to 40px side padding, at 768px.
<nav class="tng-breadcrumb" aria-label="Breadcrumb"> <ol class="tng-breadcrumb-list" role="list"> <li class="tng-breadcrumb-item is-home"> <a class="tng-icon-button is-no-bg" href="#" aria-label="Home"> <i class="tng-icon"></i> </a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li>
<li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">All new vehicles</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li> <li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">Hybrid</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li> <li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">Yaris</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li>
<li class="tng-breadcrumb-item"> <span class="tng-text-body is-6 is-heavy" aria-current="page"> Yaris Hybrid 130 GR Sport </span> </li> </ol></nav>role="list" keeps the list semantics Safari drops from a list without bullets. The home and ellipsis glyphs come from the stylesheet: leave their tng-icon empty and name the control with aria-label.
Elements
Section titled “Elements”Trail without the bar
Section titled “Trail without the bar”The trail and its items work on their own, so a breadcrumb can sit inside another surface, such as a hero, without the bar’s background, border and padding. Keep the <nav> and its label; drop the class.
<nav aria-label="Breadcrumb"> <ol class="tng-breadcrumb-list" role="list"> <li class="tng-breadcrumb-item is-home"> <a class="tng-icon-button is-no-bg" href="#" aria-label="Home"> <i class="tng-icon"></i> </a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li>
<li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">All new vehicles</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li> <li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">Hybrid</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li> <li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">Yaris</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li>
<li class="tng-breadcrumb-item"> <span class="tng-text-body is-6 is-heavy" aria-current="page"> Yaris Hybrid 130 GR Sport </span> </li> </ol></nav>Long labels
Section titled “Long labels”Labels wrap rather than truncate. To keep a long label on one line, add tng-overflow-ellipsis to it and decide its maximum width yourself — the breadcrumb sets no width limit on its items.
States
Section titled “States”Collapsed
Section titled “Collapsed”Add .is-collapsed to the trail to shorten it. On desktop it keeps the home link, the ellipsis, the immediate parent and the current page; below 768px it keeps only the ellipsis and the current page. The ellipsis item (.tng-breadcrumb-item.is-ellipsis) shows only while the trail is collapsed — place it right after the home link. The trail must end with the current page, preceded by its immediate parent.
<nav class="tng-breadcrumb" aria-label="Breadcrumb"> <ol class="tng-breadcrumb-list is-collapsed" role="list"> <li class="tng-breadcrumb-item is-home"> <a class="tng-icon-button is-no-bg" href="#" aria-label="Home"> <i class="tng-icon"></i> </a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li>
<li class="tng-breadcrumb-item is-ellipsis"> <button class="tng-icon-button is-no-bg" type="button" aria-expanded="false" aria-label="Show full path" > <i class="tng-icon"></i> </button> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li>
<li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">All new vehicles</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li> <li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">Hybrid</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li> <li class="tng-breadcrumb-item"> <a class="tng-link is-neutral" href="#">Yaris</a> <i class="tng-icon icon-chevron-right" aria-hidden="true"></i> </li>
<li class="tng-breadcrumb-item"> <span class="tng-text-body is-6 is-heavy" aria-current="page"> Yaris Hybrid 130 GR Sport </span> </li> </ol></nav>Hidden items stay in the DOM with display: none, so their links leave the tab order until the trail expands. Deciding when to collapse is yours, as is expanding: remove .is-collapsed and set aria-expanded="true" when the ellipsis is activated (point its aria-controls at the list’s id), then move focus to the first link that appeared, because the ellipsis itself disappears. The recipe below shows one way to wire it.
Recipes
Section titled “Recipes”On a narrow viewport both trails start collapsed; on desktop the short one stays expanded and the deep one, which would wrap, collapses. Activate the ellipsis to expand a trail in place; press Escape or interact outside it to collapse it again.
The breadcrumb follows the WAI-ARIA Breadcrumb pattern and meets WCAG 2.1 AA. It is a labelled navigation landmark holding an ordered list of links, from the home page down to the current page. An accessible breadcrumb shows a screen-reader user the same hierarchy a sighted user sees, marks which page they are on, and keeps the collapsed levels reachable from the keyboard.
For designers
Section titled “For designers”- Every link and the current page must meet 4.5:1 contrast against the bar on every supported surface. Source: WCAG 1.4.3 Contrast (Minimum).
- The home and ellipsis icons must meet 3:1 against the bar. Source: WCAG 1.4.11 Non-text Contrast.
- The current page must look different from the parent links in more than colour. It is heavier and has no underline. Source: WCAG 1.4.1 Use of Color.
- Focus styles on the links and icon controls must stay visible on every supported surface. Source: WCAG 2.4.7 Focus Visible.
- Labels must name the page they lead to, so each link makes sense on its own. Source: WCAG 2.4.4 Link Purpose (In Context).
For developers
Section titled “For developers”Mark the breadcrumb up as a navigation list, not as plain text with loose separators. The <ol> already tells assistive technology how many levels there are and in what order. The chevron icons carry aria-hidden="true", so screen readers never announce them, and the list structure carries the sequence instead. Source: WCAG 1.3.1 Info and Relationships.
is-collapsed hides the middle levels with display: none. They stay in the DOM but leave the tab order and the accessibility tree. While collapsed, the ellipsis is the only way to reach them. The consumer owns the expand and collapse behaviour; the Develop tab’s recipe shows a working version. Source: WCAG 2.4.3 Focus Order.
If you truncate a long label with tng-overflow-ellipsis, the full text stays in the DOM, so screen readers still read the whole name.
A breadcrumb is one of the ways a user can find where they are within a set of pages. Source: WCAG 2.4.8 Location.
Keyboard interaction
Section titled “Keyboard interaction”| Key | Action |
|---|---|
| Tab / Shift + Tab | Move through the home link, the ellipsis and each parent link. The current page is text and is never a stop. |
| Enter / Space | On the ellipsis: expand the trail in place and move focus to the first revealed link |
| Enter | On a link: follow it |
| Escape | Collapse an expanded trail and return focus to the ellipsis |
Clicking or tapping outside the bar also collapses the trail. Source: WCAG 2.1.1 Keyboard.
Labelling elements
Section titled “Labelling elements”Give every element the role, name and state that assistive technology needs.
Navigation
A <nav> landmark named with aria-label="Breadcrumb". Translate the label, and keep it distinct from the page’s other <nav> landmarks.
List
An <ol> with role="list". Removing the list style makes Safari drop list semantics, and role="list" restores them.
Home link
The icon is the link’s only content, so name the link with aria-label="Home".
Ellipsis
A native <button type="button"> named with aria-label, for example “Show full path”. It discloses the hidden levels in place rather than opening a menu, so it carries aria-expanded kept in sync with the trail and no aria-haspopup.
Parent links
Plain <a href> elements, named by their visible text.
Current page
The last item is text, not a link: no href, and aria-current="page" so screen readers announce it as the current page.
Source: WCAG 4.1.2 Name, Role, Value.