enes

Breadcrumb

Breadcrumb shows where a page sits in the hierarchy above it, and gives the reader a way back up. It renders a `nav` landmark around an ordered list, so a screen reader can jump straight to it and a search engine can read the trail.

The landmark names itself `Breadcrumb`, the last step carries `aria-current`, and the dividers are held out of the accessibility tree — a trail of three steps reads as three, not as five. Every one of those can be overridden: pass your own `aria-label`, or an `aria-labelledby`, and the default steps aside.

To create a breadcrumb, you will need to use the following components:

  • Breadcrumb: The landmark and the list. It creates the context the rest read.
  • BreadcrumbItem: One step of the trail — the list item the step lives in. It takes anything, not only a step.
  • BreadcrumbButton: A step that can be activated: an anchor when it goes somewhere, a button when it does something.
  • BreadcrumbDivider: The mark between two steps. It is decoration, and is hidden from assistive technology.

Usage

A breadcrumb is a list of steps with a divider between them. The last step is the page the reader is already on, so it is marked `current` rather than linked away.

<script>
	import { Breadcrumb, BreadcrumbItem, BreadcrumbButton, BreadcrumbDivider } from 'fluentui-svelte';
</script>

<Breadcrumb>
	<BreadcrumbItem>
		<BreadcrumbButton as="a" href="/">Home</BreadcrumbButton>
	</BreadcrumbItem>
	<BreadcrumbDivider />
	<BreadcrumbItem>
		<BreadcrumbButton as="a" href="/files">Files</BreadcrumbButton>
	</BreadcrumbItem>
	<BreadcrumbDivider />
	<BreadcrumbItem>
		<BreadcrumbButton current>Quarterly report</BreadcrumbButton>
	</BreadcrumbItem>
</Breadcrumb>

Size

`size` sets the type, the height and the divider of every step at once.

Icon

`icon` takes a snippet or a component and renders it beside the label, on the side `iconPosition` asks for.

`current` marks the step as the page the trail ends at. It announces `aria-current` and reads as text rather than as a way out, so the last step does not offer to take the reader where they already are.

A step takes whatever you put in it, so a long trail folds its middle into a menu by making that menu a step of its own. Which steps fold is your call — slice the list wherever the layout needs it. The label on the menu button is yours to write, and it is worth writing: a trigger with only an icon says nothing to a screen reader.

`focusMode` decides how the focus walks the trail. `tab`, the default, leaves every step its own tab stop, which is what a reader expects of a row of links. `arrow` gives the whole trail a single tab stop and moves between steps with the arrow keys, with `Home` and `End` for the ends.

NameTypeDefaultDescription
ref bindableHTMLElementThe DOM reference of the `nav`.
listRef bindableHTMLOListElementThe DOM reference of the list.
listPropsHTMLOlAttributesThe props to spread on the list element.
size'small' | 'medium' | 'large''medium'The size of every step and divider of the trail.
focusMode'tab' | 'arrow''tab'How the focus walks the trail: `tab` leaves every step its own tab stop, `arrow` gives the trail a single one and moves between steps with the arrow keys.
Element Attributes
NameTypeDefaultDescription
ref bindableHTMLLIElementThe DOM reference of the item.
Element Attributes (li)
NameTypeDefaultDescription
ref bindableBreadcrumbItemElementDOMType[T]The DOM reference of the step.
as'button' | 'a''button'The DOM element to render. A step that goes somewhere is an anchor and takes `href`.
iconSnippet | ComponentThe icon to display beside the label.
iconPosition'before' | 'after''before'Which side of the label the icon sits on.
currentbooleanfalseMarks the step as the page the trail ends at, which is what `aria-current` announces.
disabledbooleanDisables the user interaction.
disabledFocusablebooleanfalseKeeps a disabled step focusable, so the tab order stays the same for a keyboard or screen reader user.
HTML Attributes
NameTypeDefaultDescription
ref bindableHTMLLIElementThe DOM reference of the divider.
Element Attributes (li)

Give the landmark your own `aria-label` when a page carries more than one trail, so each is distinguishable, or an `aria-labelledby` pointing at a heading you already render. The dividers are hidden, so the list reads as the number of steps it has, and the last step carries `aria-current`. A step with an icon and no label needs an `aria-label` of its own. Structured data is left to you: a search engine reads a trail through `BreadcrumbList` from schema.org, but the text of a step lives in your markup and the URLs live in your routing, so the trail you publish is yours to build.