Breadcrumb
A navigational helper that reveals the user's location within a website or web application hierarchy.
breadcrumb.tsx
Breadcrumb trail component supporting icons, custom separators, and interactive dropdown ellipsis.
ReactTailwindUI ComponentNavigationBreadcrumb
"use client";
import * as React from "react";
import { Icon } from "@iconify/react";
import { cn } from "@/lib/utils";
const Breadcrumb = React.forwardRef<
HTMLElement,
React.ComponentPropsWithoutRef<"nav"> & {
separator?: React.ReactNode;
}
>(({ ...props }, ref) => <nav ref={ref} aria-label="breadcrumb" {...props} />);
Breadcrumb.displayName = "Breadcrumb";
const BreadcrumbList = React.forwardRef<
HTMLOListElement,
React.ComponentPropsWithoutRef<"ol">
>(({ className, ...props }, ref) => (
<ol
ref={ref}
className={cn(
"flex flex-wrap items-center gap-1.5 break-words text-sm text-zinc-500 dark:text-zinc-400 sm:gap-2",
className
)}
{...props}
/>
));
BreadcrumbList.displayName = "BreadcrumbList";
const BreadcrumbItem = React.forwardRef<
HTMLLIElement,
React.ComponentPropsWithoutRef<"li">
>(({ className, ...props }, ref) => (
<li
ref={ref}
className={cn("inline-flex items-center gap-1.5", className)}
{...props}
/>
));
BreadcrumbItem.displayName = "BreadcrumbItem";
const BreadcrumbLink = React.forwardRef<
HTMLAnchorElement,
React.ComponentPropsWithoutRef<"a"> & {
icon?: string;
}
>(({ className, icon, children, ...props }, ref) => {
return (
<a
ref={ref}
className={cn(
"inline-flex items-center gap-1.5 transition-colors text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-100 cursor-pointer font-medium",
className
)}
{...props}
>
{icon && <Icon icon={icon} className="size-4 shrink-0" />}
{children}
</a>
);
});
BreadcrumbLink.displayName = "BreadcrumbLink";
const BreadcrumbPage = React.forwardRef<
HTMLSpanElement,
React.ComponentPropsWithoutRef<"span"> & {
icon?: string;
}
>(({ className, icon, children, ...props }, ref) => (
<span
ref={ref}
role="link"
aria-disabled="true"
aria-current="page"
className={cn("inline-flex items-center gap-1.5 font-semibold text-zinc-900 dark:text-zinc-100", className)}
{...props}
>
{icon && <Icon icon={icon} className="size-4 shrink-0 text-sky-600 dark:text-sky-400" />}
{children}
</span>
));
BreadcrumbPage.displayName = "BreadcrumbPage";
const BreadcrumbSeparator = ({
children,
className,
...props
}: React.ComponentProps<"li">) => (
<li
role="presentation"
aria-hidden="true"
className={cn("[&>svg]:size-3.5 text-zinc-400 dark:text-zinc-600 select-none", className)}
{...props}
>
{children ?? <Icon icon="hugeicons:arrow-right-01" className="size-3.5" />}
</li>
);
BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
const BreadcrumbEllipsis = ({
className,
children,
...props
}: React.ComponentProps<"button">) => (
<button
type="button"
aria-label="Toggle collapsed breadcrumbs"
className={cn(
"flex size-7 items-center justify-center rounded-lg border border-zinc-200 dark:border-zinc-800 bg-zinc-100 dark:bg-zinc-800 hover:bg-zinc-200 dark:hover:bg-zinc-700 text-zinc-600 dark:text-zinc-400 hover:text-zinc-900 dark:hover:text-zinc-100 transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
className
)}
{...props}
>
<Icon icon="hugeicons:more-horizontal" className="size-4" />
<span className="sr-only">Toggle menu</span>
</button>
);
BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
export {
Breadcrumb,
BreadcrumbList,
BreadcrumbItem,
BreadcrumbLink,
BreadcrumbPage,
BreadcrumbSeparator,
BreadcrumbEllipsis,
};
Default
A standard breadcrumb navigation path leading to the current active page.
With Icons
Pass icon names to BreadcrumbLink and BreadcrumbPage for enhanced visual cues.
icon: string
Collapsed Items with Dropdown Menu
Clicking the BreadcrumbEllipsis trigger opens our DropdownMenu popover containing hidden route items without shifting page layout.
API Reference
Props — Breadcrumb
Sub-components for building accessible Breadcrumb trails.
| Component | Props | Description |
|---|---|---|
| Breadcrumb | HTMLNavProps | Root container with aria-label="breadcrumb". |
| BreadcrumbLink | icon?: string | Interactive link with optional icon. |
| BreadcrumbPage | icon?: string | Active page with aria-current="page". |
| BreadcrumbEllipsis | HTMLButtonProps | Button trigger for opening DropdownMenu hidden routes. |