Breadcrumb
Breadcrumbs is a navigation pattern that helps users understand the hierarchy of a website.
Import
Blueprint exports 4 breadcrumb-related components:
Breadcrumb
: The parent container for breadcrumbs.BreadcrumbItem
: Individual breadcrumb element containing a link and a divider.BreadcrumbLink
: The breadcrumb link.BreadcrumbSeparator
: The visual separator between each breadcrumb.
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbSeparator,} from '@hover/blueprint'
Usage
Add isCurrentPage
prop to the BreadcrumbItem
that matches the current path.
When this prop is present, the BreadcrumbLink
renders a span
with
aria-current
set to page
instead of an anchor element.
<Breadcrumb> <BreadcrumbItem> <BreadcrumbLink href='#'>Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem> <BreadcrumbLink href='#'>Docs</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem isCurrentPage> <BreadcrumbLink href='#'>Breadcrumb</BreadcrumbLink> </BreadcrumbItem></Breadcrumb>
Separators
Change the separator used in the breadcrumb by passing a string, like -
or an
icon.
<Breadcrumb separator='-'> <BreadcrumbItem> <BreadcrumbLink href='#'>Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem> <BreadcrumbLink href='#'>About</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem isCurrentPage> <BreadcrumbLink href='#'>Contact</BreadcrumbLink> </BreadcrumbItem></Breadcrumb>
Using an icon as the separator
<Breadcrumb spacing='8px' separator={<ChevronRightIcon color='gray.500' />}> <BreadcrumbItem> <BreadcrumbLink href='#'>Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem> <BreadcrumbLink href='#'>About</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem isCurrentPage> <BreadcrumbLink href='#'>Contact</BreadcrumbLink> </BreadcrumbItem></Breadcrumb>
Using a separator in last item
If you want to have a BreadcrumbSeparator
in the last item of the Breadcrumb
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
BreadcrumbItem
. Feel free to also inspect the example below with the browsers
dev tools.
<Box> <Breadcrumb> <BreadcrumbItem> <BreadcrumbLink href=''>Page 1</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem> <BreadcrumbLink href=''>Page 2</BreadcrumbLink> </BreadcrumbItem> {/* this will generate a span in the ol HTML tag which causes the error: */} {/* <BreadcrumbSeparator /> */} </Breadcrumb> {/* preferred solution: */} <Breadcrumb pt='3'> <BreadcrumbItem> <BreadcrumbLink href=''>Page 1</BreadcrumbLink> </BreadcrumbItem> {/* this creates the exact same HTML as for page 1 */} <BreadcrumbItem> <BreadcrumbLink href=''>Page 2</BreadcrumbLink> <BreadcrumbSeparator /> </BreadcrumbItem> </Breadcrumb> <Breadcrumb pt='3'> <BreadcrumbItem> <BreadcrumbLink href=''>Page 1</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem> <BreadcrumbLink href=''>Page 2</BreadcrumbLink> </BreadcrumbItem> {/* this works too, but creates an additional empty li HTML tag */} <BreadcrumbItem /> </Breadcrumb></Box>
Composition
Breadcrumb 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 fontWeight='medium' fontSize='sm'> <BreadcrumbItem> <BreadcrumbLink href='#'>Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem> <BreadcrumbLink href='#'>About</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem isCurrentPage> <BreadcrumbLink href='#'>Current</BreadcrumbLink> </BreadcrumbItem></Breadcrumb>
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 BreadcrumbLink
component.
It'll replace the rendered a
tag with Reach's Link.
// import { Link } from "@reach/router"<Breadcrumb> <BreadcrumbItem> <BreadcrumbLink as={Link} to='#'> Home </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem> <BreadcrumbLink as={Link} to='#'> About </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbItem isCurrentPage> <BreadcrumbLink>Contact</BreadcrumbLink> </BreadcrumbItem></Breadcrumb>
Accessibility
- The Breadcrumbs are rendered in a
nav
to denote that it is a navigation landmark. - The Breadcrumb
nav
hasaria-label
set tobreadcrumb
. - The BreadcrumbItem with
isCurrentPage
prop adds thearia-current=page
to the BreadcrumbLink. - The separator has
role
set topresentation
to denote that its for presentation purposes.