Skip to content
Ndop UI

Breadcrumb

Shows the path to the current page in a hierarchy of pages.

  • v1.0.0
  • SSR
  • Zoneless
  • 0.7 kB gzip
import { Component } from '@angular/core';
import { NdIcon } from '@ndop/core';
import {
  Breadcrumb,
  BreadcrumbEllipsis,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from '@/ui/breadcrumb/breadcrumb';

/** A trail to the current page, with middle items collapsed. */
@Component({
  selector: 'example-breadcrumb-demo',
  imports: [
    Breadcrumb,
    BreadcrumbEllipsis,
    BreadcrumbItem,
    BreadcrumbLink,
    BreadcrumbList,
    BreadcrumbPage,
    BreadcrumbSeparator,
    NdIcon,
  ],
  template: `
    <nav ndBreadcrumb>
      <ol ndBreadcrumbList>
        <li ndBreadcrumbItem><a ndBreadcrumbLink href="#home">Home</a></li>
        <li ndBreadcrumbSeparator><svg ndIcon="chevron-right"></svg></li>
        <li ndBreadcrumbItem>
          <span ndBreadcrumbEllipsis><svg ndIcon="ellipsis"></svg></span>
        </li>
        <li ndBreadcrumbSeparator><svg ndIcon="chevron-right"></svg></li>
        <li ndBreadcrumbItem>
          <a ndBreadcrumbLink href="#components">Components</a>
        </li>
        <li ndBreadcrumbSeparator><svg ndIcon="chevron-right"></svg></li>
        <li ndBreadcrumbItem><span ndBreadcrumbPage>Breadcrumb</span></li>
      </ol>
    </nav>
  `,
})
export class BreadcrumbDemoExample {}

A breadcrumb shows where the current page sits in the site's hierarchy, with links back up. It's a nav landmark named "Breadcrumb" holding an ordered list; the last item is the current page, marked aria-current="page", and separators are hidden from screen readers.

Installation

npx @ndop/cli add breadcrumb

Usage

import {
  Breadcrumb,
  BreadcrumbEllipsis,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from '@/ui/breadcrumb/breadcrumb';
<nav ndBreadcrumb>
  <ol ndBreadcrumbList>
    <li ndBreadcrumbItem><a ndBreadcrumbLink href="#home">Home</a></li>
    <li ndBreadcrumbSeparator><svg ndIcon="chevron-right"></svg></li>
    <li ndBreadcrumbItem>
      <span ndBreadcrumbEllipsis><svg ndIcon="ellipsis"></svg></span>
    </li>
    <li ndBreadcrumbSeparator><svg ndIcon="chevron-right"></svg></li>
    <li ndBreadcrumbItem>
      <a ndBreadcrumbLink href="#components">Components</a>
    </li>
    <li ndBreadcrumbSeparator><svg ndIcon="chevron-right"></svg></li>
    <li ndBreadcrumbItem><span ndBreadcrumbPage>Breadcrumb</span></li>
  </ol>
</nav>

Examples

A trail with slash separators.

import { Component } from '@angular/core';
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from '@/ui/breadcrumb/breadcrumb';

/** A trail with slashes between the items. */
@Component({
  selector: 'example-breadcrumb-separator',
  imports: [
    Breadcrumb,
    BreadcrumbItem,
    BreadcrumbLink,
    BreadcrumbList,
    BreadcrumbPage,
    BreadcrumbSeparator,
  ],
  template: `
    <nav ndBreadcrumb label="Settings breadcrumb">
      <ol ndBreadcrumbList>
        <li ndBreadcrumbItem><a ndBreadcrumbLink href="#home">Home</a></li>
        <li ndBreadcrumbSeparator>/</li>
        <li ndBreadcrumbItem>
          <a ndBreadcrumbLink href="#settings">Settings</a>
        </li>
        <li ndBreadcrumbSeparator>/</li>
        <li ndBreadcrumbItem><span ndBreadcrumbPage>Billing</span></li>
      </ol>
    </nav>
  `,
})
export class BreadcrumbSeparatorExample {}

Accessibility

Breadcrumb has no keyboard interaction or focus handling of its own; it keeps the semantics of the element it's on.

API reference

Breadcrumb

nav[ndBreadcrumb]

A breadcrumb trail: the path from the top of a site to the current page, as a nav landmark.

Breadcrumb binding Type Default
[label]
Name of the landmark.
string'Breadcrumb'
Data attribute Values
data-slotbreadcrumb

BreadcrumbList

ol[ndBreadcrumbList]

The ordered list of a breadcrumb's items and separators.

BreadcrumbList binding Type Default
[class]
Extra classes, merged last so they win.
string''
Data attribute Values
data-slotbreadcrumb-list

BreadcrumbItem

li[ndBreadcrumbItem]

One step of a breadcrumb trail.

BreadcrumbItem binding Type Default
[class]
Extra classes, merged last so they win.
string''
Data attribute Values
data-slotbreadcrumb-item
a[ndBreadcrumbLink]

A link to an ancestor page. With the router, add routerLink to the same a.

BreadcrumbLink binding Type Default
[class]
Extra classes, merged last so they win.
string''
Data attribute Values
data-slotbreadcrumb-link

BreadcrumbPage

[ndBreadcrumbPage]

The current page, last in the trail: plain text marked aria-current="page".

BreadcrumbPage binding Type Default
[class]
Extra classes, merged last so they win.
string''
Data attribute Values
data-slotbreadcrumb-page

BreadcrumbSeparator

li[ndBreadcrumbSeparator]

The mark between two items, hidden from assistive technology. Put an icon in it, such as chevron-right, which turns around in right-to-left layouts.

BreadcrumbSeparator binding Type Default
[class]
Extra classes, merged last so they win.
string''
Data attribute Values
data-slotbreadcrumb-separator

BreadcrumbEllipsis

[ndBreadcrumbEllipsis]

Stands for collapsed items in a long trail. Put an icon in it, such as ellipsis; wrap it in a menu trigger to reveal the hidden items.

BreadcrumbEllipsis binding Type Default
[class]
Extra classes, merged last so they win.
string''
Data attribute Values
data-slotbreadcrumb-ellipsis

Agent notes

Do

  • Use nav[ndBreadcrumb] with ol[ndBreadcrumbList], and li for items and separators.
  • End with ndBreadcrumbPage for the current page, as text, not a link.
  • Put a chevron-right or / in each separator; chevrons turn around in right-to-left layouts.

Don't

  • Don't use a breadcrumb as the site's main navigation.
  • Don't show it on flat sites, where every page sits at the top level.