Patterns · Navigation

Breadcrumb Bar

A breadcrumb bar shows where the page sits in the site and lets the user go back up in one click. Two to six crumbs, separated by a slash.

Tokens, sizes, measurements and requirements. Values come from the live token package and from Figma: Breadcrumb Bar.

Design Tokens

Resolved from the live token package. The crumb tokens are the same as in Breadcrumb Base; the separator is the only token of the bar itself.

PartUseTokenValue

Sizes

BreakpointBar heightCrumb paddingTextSeparator heightSide paddingExtra bottom padding
xs (0–639px)56px6px 7px12/12, 0.24px24px16px0
sm (640–768px)56px6px 7px12/12, 0.24px24px32px0
md (769–1023px)72px9px 10px14/14, 0.28px32px32px8px
lg and xl (1024px+)80px9px 10px14/14, 0.28px32px40px16px

The bar height is the crumb height plus 16px above and below (.breadcrumb__bar padding 16px 0). sm still looks like mobile. Side padding is always var(--px-page), never a fixed value, and never var(--px-full).


Measurements

Dimensions

Padding of the bar, drawn on the real .breadcrumb__bar: 16px above and below the crumbs. The side padding and the extra bottom padding belong to the .breadcrumb block and are in the table. Change the Breakpoint to re-measure.

Breakpoint
The bar at true size (1:1).
AttributeValue
Padding of the bar row16px top and bottom, none at the sides
Side padding of the blockvar(--px-page): 16px xs, 32px sm and md, 40px lg and xl
Extra bottom padding of the block0 below 769px, 8px at md, 16px from 1024px
Gap between parts8px
Bar height56px mobile, 72px md, 80px lg and xl
Separator4px wide, 24px high on mobile, 32px on desktop

Spacing

The vertical and gap values as spacing tokens.

PartValue
Bar padding, top and bottomspace-16
Gap between partsspace-8
Side paddingvar(--px-page) (the grid margin)
Extra bottom, mdspace-8
Extra bottom, lg and xlspace-16

States

The bar has no state of its own. Enabled, hover and current page belong to each crumb: see Breadcrumb Base.


Typography

PartFontSize / lineLetter spacingWeight
Crumb, desktopBreuer Condensed14px / 14px0.28pxRegular 400, current 600
Crumb, mobileBreuer Condensed12px / 12px0.24pxRegular 400, current 600
SeparatorBreuer Condensed14px0.28pxRegular 400

Open points against Figma: the desktop separator is body-sm in Figma (14/20, 0.36px) and has font feature ss06; breadcrumb.css writes 0.28px and no ss06 for both sizes. Not changed here: the shared file is changed only when you ask.


Structure

Elements

ElementClassNotes
BlockbreadcrumbThe nav with aria-label="Breadcrumb". Side padding var(--px-page).
Barbreadcrumb__barFlex row, wraps, 8px gap, 16px padding above and below.
Crumbbreadcrumb-itemA link in a bordered box.
Current pagebreadcrumb-item--activeThe last crumb.
Separatorbreadcrumb-sepA “/” character.

Types

CrumbsMarkup
2 (Home, current page)1 link, 1 separator, 1 current
3 to 6Parent links with a separator between each, then the current page

Width

The bar is as wide as the page content. The crumbs keep their own width and wrap to the next row when the row is full.


Motion

The bar does not move. Only the text color of a crumb changes on hover: see Breadcrumb Base.


Behavior

TopicResult
PlacementFirst in .page, directly under the header, before the title block. The block that follows zeroes its top padding.
WrappingThe crumbs wrap to a new row when the trail is too long. A crumb never wraps its label.
BreakpointThe sizes change at 769px. sm looks like mobile.
BackgroundNone. It takes the page background: white or, on My Pages, grey.

Accessibility Requirements

TopicRequirement
Landmarknav[aria-label="Breadcrumb"].
LinksEvery crumb but the last is an <a href>. The last is a span with aria-current="page".
SeparatorA “/” character that adds no meaning. Hide it from screen readers when you build the markup with a list; the shipped markup keeps it as text.
OrderThe crumbs are in DOM order from Home to the current page.
FocusA visible focus ring on every link (WCAG 2.4.7).
ContrastText must reach 4.5:1 on the page background, white or grey (WCAG 1.4.3).