HTMLChakraProps<"ol">Breadcrumb
Breadcrumbs is a navigation pattern that helps users understand the hierarchy of a website.
Import#
Chakra UI exports 4 breadcrumb-related components:
Breadcrumb: The parent container for breadcrumbs.Breadcrumb.List: The container for individual items.Breadcrumb.Item: Individual breadcrumb element containing a link and a divider.Breadcrumb.Link: The breadcrumb link.Breadcrumb.Separator: The visual separator between each breadcrumb.
import { Breadcrumb } from '@chakra-ui/react'
Usage#
Add isCurrentPage prop to the Breadcrumb.Item that matches the current path.
When this prop is present, the Breadcrumb.Link renders a span with
aria-current set to page instead of an anchor element.
<Breadcrumb.Root><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link href='#'>Home</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item><Breadcrumb.Link href='#'>Docs</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item isCurrentPage><Breadcrumb.Link href='#'>Breadcrumb</Breadcrumb.Link></Breadcrumb.Item></Breadcrumb.List></Breadcrumb.Root>
Separators#
Change the separator used in the breadcrumb by passing a string, like - or an
icon.
<Breadcrumb.Root separator='-'><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link href='#'>Home</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item><Breadcrumb.Link href='#'>About</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item isCurrentPage><Breadcrumb.Link href='#'>Contact</Breadcrumb.Link></Breadcrumb.Item></Breadcrumb.List></Breadcrumb.Root>
Using an icon as the separator#
<Breadcrumb.Rootspacing='8px'separator={<ChevronRightIcon color='gray.500' />}><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link href='#'>Home</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item><Breadcrumb.Link href='#'>About</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item isCurrentPage><Breadcrumb.Link href='#'>Contact</Breadcrumb.Link></Breadcrumb.Item></Breadcrumb.List></Breadcrumb.Root>
Using a separator in last item#
If you want to have a Breadcrumb.Separator in the last item of the
Breadcrumb.Root you have different ways to achieve it. But to avoid the
'React does not recognize the isLastChild prop on a DOM element.' error you
can not simply add the separator directly in the Breadcrumb.
The clean way to achieve it is to put the separator in the last
Breadcrumb.Item. Feel free to also inspect the example below with the browsers
dev tools.
<Box><Breadcrumb.Root><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link href=''>Page 1</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item><Breadcrumb.Link href=''>Page 2</Breadcrumb.Link></Breadcrumb.Item>{/* this will generate a span in the ol HTML tag which causes the error: */}{/* <Breadcrumb.Separator /> */}</Breadcrumb.List></Breadcrumb.Root>{/* preferred solution: */}<Breadcrumb.Root pt='3'><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link href=''>Page 1</Breadcrumb.Link></Breadcrumb.Item>{/* this creates the exact same HTML as for page 1 */}<Breadcrumb.Item><Breadcrumb.Link href=''>Page 2</Breadcrumb.Link><Breadcrumb.Separator /></Breadcrumb.Item></Breadcrumb.List></Breadcrumb.Root><Breadcrumb.Root pt='3'><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link href=''>Page 1</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item><Breadcrumb.Link href=''>Page 2</Breadcrumb.Link></Breadcrumb.Item>{/* this works too, but creates an additional empty li HTML tag */}<Breadcrumb.Item /></Breadcrumb.List></Breadcrumb.Root></Box>
Composition#
Breadcrumb.Root composes Box so you can pass all
Box props to change the style of the breadcrumbs. Let's say we need to reduce
the fontSize of the breadcrumbs.
<Breadcrumb.Root fontWeight='medium' fontSize='sm'><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link href='#'>Home</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item><Breadcrumb.Link href='#'>About</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item isCurrentPage><Breadcrumb.Link href='#'>Current</Breadcrumb.Link></Breadcrumb.Item></Breadcrumb.List></Breadcrumb.Root>
Usage with Routing Library#
To use the Breadcrumb with a routing Library like Reach Router or React Router,
all you need to do is to pass the as prop to the Breadcrumb.Link component.
It'll replace the rendered a tag with Reach's Link.
// import { Link } from "@reach/router"<Breadcrumb.Root><Breadcrumb.List><Breadcrumb.Item><Breadcrumb.Link as={Link} to='#'>Home</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item><Breadcrumb.Link as={Link} to='#'>About</Breadcrumb.Link></Breadcrumb.Item><Breadcrumb.Item isCurrentPage><Breadcrumb.Link>Contact</Breadcrumb.Link></Breadcrumb.Item></Breadcrumb.List></Breadcrumb.Root>
Accessibility#
- The Breadcrumbs are rendered in a
navto denote that it is a navigation landmark. - The Breadcrumb
navhasaria-labelset tobreadcrumb. - The Breadcrumb.Item with
isCurrentPageprop adds thearia-current=pageto the Breadcrumb.Link. - The separator has
roleset topresentationto denote that its for presentation purposes.
Props#
Breadcrumb.Root Props#
listProps
listPropsseparator
separatorThe visual separator between each breadcrumb item
type ONLY_FOR_FORMAT =
| string
| ReactElement<any, string | JSXElementConstructor<any>>/spacing
spacingThe left and right margin applied to the separator
string | number | boolean | (string & {}) | ResponsiveArray<string | number | (string & {})> | Partial<Record<string, string | number | (string & {})>> | ResponsiveArray<...> | Partial<...> | ((theme: Record<...>) => ResponsiveValue<...>)0.5remBreadcrumb.Item Props#
isCurrentPage
isCurrentPagebooleanfalseisLastChild
isLastChildbooleanfalseseparator
separatorThe visual separator between each breadcrumb item
type ONLY_FOR_FORMAT =
| string
| ReactElement<any, string | JSXElementConstructor<any>>/spacing
spacingThe left and right margin applied to the separator
string | number | boolean | (string & {}) | ResponsiveArray<string | number | (string & {})> | Partial<Record<string, string | number | (string & {})>> | ResponsiveArray<...> | Partial<...> | ((theme: Record<...>) => ResponsiveValue<...>)0.5remBreadcrumb.Link Props#
The Breadcrumb.Link composes the Link component so you can use all Link props.
isCurrentPage
isCurrentPagebooleanfalseBreadcrumb.Separator Props#
The Breadcrumb.Separator composes the Box component so you can use all Box props.