Breadcrumbs

Breadcrumbs show hierarchy and navigational context for a user’s location within an application.

installyarn add @react-spectrum/breadcrumbs
version3.0.0-alpha.1
usageimport {Breadcrumbs, Item} from '@react-spectrum/breadcrumbs'

Example#


<Breadcrumbs>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs>
  <Item key="home">
    Home
  </Item>
  <Item key="trendy">
    Trendy
  </Item>
  <Item key="march 2020 assets">
    March 2020 Assets
  </Item>
</Breadcrumbs>

Content#


Breadcrumbs follow the Collection Components API, accepting only static children. Similar to the Menu, Breadcrumbs accept an <Item> component, each with a key prop which is passed to the onAction handler to identify the selected item. Basic usage of Breadcrumbs, seen in the example above, shows a list of Item components, populated with a string. See Events for more information.

Internationalization#

In order to internationalize Breadcrumbs, the strings of all child items should be localized.

Events#


Use the onAction prop as a callback to handle press events on items.

function Example() {
  let folders = [
    {id: 1, label: 'Home'},
    {id: 2, label: 'Trendy'},
    {id: 3, label: 'March 2020 Assets'}
  ];
  let [folderId, setFolderId] = React.useState();
  return (
    <div>
      <Breadcrumbs onAction={(a) => setFolderId(a)}>
        {folders.map(f => <Item key={f.id}>{f.label}</Item>)}
      </Breadcrumbs>
      <p>You pressed folder ID: {folderId}</p>
    </div>
  );
}
function Example() {
  let folders = [
    {id: 1, label: 'Home'},
    {id: 2, label: 'Trendy'},
    {id: 3, label: 'March 2020 Assets'}
  ];
  let [folderId, setFolderId] = React.useState();
  return (
    <div>
      <Breadcrumbs onAction={(a) => setFolderId(a)}>
        {folders.map((f) => (
          <Item key={f.id}>{f.label}</Item>
        ))}
      </Breadcrumbs>
      <p>You pressed folder ID: {folderId}</p>
    </div>
  );
}
function Example() {
  let folders = [
    {
      id: 1,
      label: 'Home'
    },
    {
      id: 2,
      label: 'Trendy'
    },
    {
      id: 3,
      label:
        'March 2020 Assets'
    }
  ];
  let [
    folderId,
    setFolderId
  ] = React.useState();
  return (
    <div>
      <Breadcrumbs
        onAction={(a) =>
          setFolderId(a)
        }>
        {folders.map(
          (f) => (
            <Item
              key={f.id}>
              {f.label}
            </Item>
          )
        )}
      </Breadcrumbs>
      <p>
        You pressed
        folder ID:{' '}
        {folderId}
      </p>
    </div>
  );
}

Props#


NameTypeDefaultDescription
size'S''M''L'"M"Size of the Breadcrumbs including spacing and layout.
maxVisibleItems'auto'number4The current number of visible items before items are collapsed.
showRootbooleanWhether to always show the root item if the items are collapsed.
childrenReactElement<ItemProps<T>>ReactElement<ItemProps<T>>[]The breadcrumb items.
isHeadingbooleanWhether the breadcrumbs are used as a heading element.
headingAriaLevelnumber1Sets the aria-level attribute of the last item, but only if isHeading is true.
isDisabledbooleanWhether the Breadcrumbs are disabled.
UNSAFE_classNamestring
UNSAFE_styleCSSProperties
Events
NameTypeDefaultDescription
onAction( (key: Key )) => voidCalled when an item is acted upon (usually selection via press).
Layout
NameTypeDefaultDescription
flexstringnumberboolean
flexGrownumber
flexShrinknumber
flexBasisnumberstring
alignSelf'auto' | 'normal' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'center' | 'stretch'
justifySelf'auto' | 'normal' | 'start' | 'end' | 'flex-start' | 'flex-end' | 'self-start' | 'self-end' | 'center' | 'left' | 'right' | 'stretch'
flexOrdernumber
gridAreastring
gridColumnstring
gridRowstring
gridColumnStartstring
gridColumnEndstring
gridRowStartstring
gridRowEndstring
Spacing
NameTypeDefaultDescription
marginDimensionValue
marginTopDimensionValue
marginLeftDimensionValue
marginRightDimensionValue
marginBottomDimensionValue
marginStartDimensionValue
marginEndDimensionValue
marginXDimensionValue
marginYDimensionValue
Sizing
NameTypeDefaultDescription
widthDimensionValue
minWidthDimensionValue
maxWidthDimensionValue
heightDimensionValue
minHeightDimensionValue
maxHeightDimensionValue
Positioning
NameTypeDefaultDescription
position'static' | 'relative' | 'absolute' | 'fixed' | 'sticky'
topDimensionValue
bottomDimensionValue
leftDimensionValue
rightDimensionValue
startDimensionValue
endDimensionValue
zIndexnumber
isHiddenboolean
Accessibility
NameTypeDefaultDescription
idstring
aria-labelstringDefines a string value that labels the current element.
aria-labelledbystringIdentifies the element (or elements) that labels the current element.
aria-describedbystringIdentifies the element (or elements) that describes the object.
aria-detailsstringIdentifies the element (or elements) that provide a detailed, extended description for the object.

Visual options#


Size#

View guidelines

The small size is useful when available space is limited.

<Breadcrumbs size="S">
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
</Breadcrumbs>
<Breadcrumbs size="S">
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
</Breadcrumbs>
<Breadcrumbs size="S">
  <Item key="home">
    Home
  </Item>
  <Item key="trendy">
    Trendy
  </Item>
</Breadcrumbs>

The medium size is the default.

<Breadcrumbs size="M">
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
</Breadcrumbs>
<Breadcrumbs size="M">
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
</Breadcrumbs>
<Breadcrumbs size="M">
  <Item key="home">
    Home
  </Item>
  <Item key="trendy">
    Trendy
  </Item>
</Breadcrumbs>

The large size places emphasis on the selected item as a page title or heading.

<Breadcrumbs size="L">
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
</Breadcrumbs>
<Breadcrumbs size="L">
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
</Breadcrumbs>
<Breadcrumbs size="L">
  <Item key="home">
    Home
  </Item>
  <Item key="trendy">
    Trendy
  </Item>
</Breadcrumbs>

Heading#

Use the isHeading prop to add a role of "heading" to the highlighted item. If a change to the aria-level is required, use the headingAriaLevel prop.

<Breadcrumbs isHeading headingAriaLevel={2}>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs isHeading headingAriaLevel={2}>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs
  isHeading
  headingAriaLevel={2}>
  <Item key="home">
    Home
  </Item>
  <Item key="trendy">
    Trendy
  </Item>
  <Item key="march 2020 assets">
    March 2020 Assets
  </Item>
</Breadcrumbs>

Visible items (overflow behavior)#

View guidelines

Breadcrumbs collapse into a menu by default, showing only a maximum of visible 4 items.

If using maxVisibleItems="auto", overflow of breadcrumb items begins when there is not enough room to display all items in the parent container.

In order to manually control the overflow, use the maxVisibleItems prop.

<Breadcrumbs maxVisibleItems={2}>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs maxVisibleItems={2}>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs
  maxVisibleItems={2}>
  <Item key="home">
    Home
  </Item>
  <Item key="trendy">
    Trendy
  </Item>
  <Item key="march 2020 assets">
    March 2020 Assets
  </Item>
</Breadcrumbs>

Root context#

View guidelines

Some applications find that displaying the root item is useful for orienting users. This variation keeps the root visible when other items are truncated into the menu.

<View overflow="hidden" width="200px">
  <Breadcrumbs showRoot maxVisibleItems="auto">
    <Item key="home">Home</Item>
    <Item key="trendy">Trendy</Item>
    <Item key="2020 assets">March 2020 Assets</Item>
    <Item key="winter">Winter</Item>
    <Item key="holiday">Holiday</Item>
  </Breadcrumbs>
</View>
<View overflow="hidden" width="200px">
  <Breadcrumbs showRoot maxVisibleItems="auto">
    <Item key="home">Home</Item>
    <Item key="trendy">Trendy</Item>
    <Item key="2020 assets">March 2020 Assets</Item>
    <Item key="winter">Winter</Item>
    <Item key="holiday">Holiday</Item>
  </Breadcrumbs>
</View>
<View
  overflow="hidden"
  width="200px">
  <Breadcrumbs
    showRoot
    maxVisibleItems="auto">
    <Item key="home">
      Home
    </Item>
    <Item key="trendy">
      Trendy
    </Item>
    <Item key="2020 assets">
      March 2020 Assets
    </Item>
    <Item key="winter">
      Winter
    </Item>
    <Item key="holiday">
      Holiday
    </Item>
  </Breadcrumbs>
</View>

Disabled#

Breadcrumbs in a disabled state shows that selection exists, but is not available in that circumstance. This can be used to maintain layout continuity.

<Breadcrumbs isDisabled>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs isDisabled>
  <Item key="home">Home</Item>
  <Item key="trendy">Trendy</Item>
  <Item key="march 2020 assets">March 2020 Assets</Item>
</Breadcrumbs>
<Breadcrumbs
  isDisabled>
  <Item key="home">
    Home
  </Item>
  <Item key="trendy">
    Trendy
  </Item>
  <Item key="march 2020 assets">
    March 2020 Assets
  </Item>
</Breadcrumbs>