Skip to Content
ComponentsBreadcrumb

Breadcrumb

Navigation hierarchy trail. Compound sub-components: Breadcrumb + Breadcrumb.Item. The last item (no href) is automatically marked as current page with aria-current="page".

Design Language Comparison

Neobrutalism
Shadcn-inspired
Flowbite-inspired
Glassmorphism
Material Design 3
Neumorphism

Neobrutalism

Bold text, / separator, yellow underline hover on links.

const NeobrutalismBreadcrumb = ({ children }) => {
  const items = Children.toArray(children).filter(isValidElement);
  return (
    <nav aria-label="Breadcrumb">
      <ol className="flex items-center flex-wrap gap-0 font-sans">
        {items.map((child, index) => (
          <li key={index} className="flex items-center">
            {child}
            {index < items.length - 1 && <span className="mx-2 text-[0.9375rem] font-extrabold text-black select-none">/</span>}
          </li>
        ))}
      </ol>
    </nav>
  );
};

NeobrutalismBreadcrumb.Item = ({ label, href }) =>
  href ? (
    <a href={href} className="text-[0.9375rem] font-extrabold text-black underline decoration-2 underline-offset-2 hover:bg-yellow-400 transition-colors">{label}</a>
  ) : (
    <span className="text-[0.9375rem] font-extrabold text-black" aria-current="page">{label}</span>
  );

// Usage:
// <NeobrutalismBreadcrumb>
//   <NeobrutalismBreadcrumb.Item label="Home" href="/" />
//   <NeobrutalismBreadcrumb.Item label="Components" href="/components" />
//   <NeobrutalismBreadcrumb.Item label="Button" />
// </NeobrutalismBreadcrumb>

Shadcn-inspired

Zinc muted link text, / separator, zinc-900 current item.

const ShadcnBreadcrumb = ({ children }) => {
  const items = Children.toArray(children).filter(isValidElement);
  return (
    <nav aria-label="Breadcrumb">
      <ol className="flex items-center flex-wrap font-sans">
        {items.map((child, index) => (
          <li key={index} className="flex items-center">
            {child}
            {index < items.length - 1 && <span className="mx-2 text-sm text-zinc-400 select-none">/</span>}
          </li>
        ))}
      </ol>
    </nav>
  );
};

ShadcnBreadcrumb.Item = ({ label, href }) =>
  href ? (
    <a href={href} className="text-sm font-medium text-zinc-500 hover:text-zinc-900 transition-colors duration-150">{label}</a>
  ) : (
    <span className="text-sm font-medium text-zinc-900" aria-current="page">{label}</span>
  );

Flowbite-inspired

Blue links (#1c64f2), separator, gray current item.

const FlowbiteBreadcrumb = ({ children }) => {
  const items = Children.toArray(children).filter(isValidElement);
  return (
    <nav aria-label="Breadcrumb">
      <ol className="flex items-center flex-wrap font-sans">
        {items.map((child, index) => (
          <li key={index} className="flex items-center">
            {child}
            {index < items.length - 1 && <span className="mx-2 text-sm text-gray-400 select-none"></span>}
          </li>
        ))}
      </ol>
    </nav>
  );
};

FlowbiteBreadcrumb.Item = ({ label, href }) =>
  href ? (
    <a href={href} className="text-sm font-medium text-[#1c64f2] hover:text-[#1a56db] transition-colors duration-200">{label}</a>
  ) : (
    <span className="text-sm font-medium text-gray-500" aria-current="page">{label}</span>
  );

Glassmorphism

Translucent white links, / separator, white current item on gradient background.

const GlassmorphismBreadcrumb = ({ children }) => {
  const items = React.Children.toArray(children);
  return (
    <nav aria-label="Breadcrumb">
      <ol className="flex items-center flex-wrap font-sans">
        {items.map((child, i) => (
          <li key={i} className="flex items-center">
            {child}
            {i < items.length - 1 && <span className="mx-2 text-sm text-white/40 select-none">/</span>}
          </li>
        ))}
      </ol>
    </nav>
  );
};
GlassmorphismBreadcrumb.Item = ({ label, href }) => href ? (
  <a href={href} className="text-sm font-medium text-white/70 hover:text-white transition-colors duration-150">{label}</a>
) : (
  <span className="text-sm font-medium text-white" aria-current="page">{label}</span>
);

Material Design 3

Purple tinted links with hover tonal pill, separator, on-surface current item.

const Md3Breadcrumb = ({ children }) => {
  const items = React.Children.toArray(children);
  return (
    <nav aria-label="Breadcrumb">
      <ol className="flex items-center flex-wrap font-sans">
        {items.map((child, i) => (
          <li key={i} className="flex items-center">
            {child}
            {i < items.length - 1 && <span className="mx-1.5 text-sm text-[#79747e] select-none"></span>}
          </li>
        ))}
      </ol>
    </nav>
  );
};
Md3Breadcrumb.Item = ({ label, href }) => href ? (
  <a href={href} className="text-sm font-medium text-[#6750a4] hover:bg-[#6750a4]/8 rounded px-1 py-0.5 transition-colors duration-200">{label}</a>
) : (
  <span className="text-sm font-medium text-[#1c1b1f]" aria-current="page">{label}</span>
);

Neumorphism

Blue-gray semibold links, faded / separator, darker current item.

const NmBreadcrumb = ({ children }) => {
  const items = React.Children.toArray(children);
  return (
    <nav aria-label="Breadcrumb">
      <ol className="flex items-center flex-wrap font-sans">
        {items.map((child, i) => (
          <li key={i} className="flex items-center">
            {child}
            {i < items.length - 1 && <span className="mx-2 text-sm text-[#6c7a9c]/40 select-none font-light">/</span>}
          </li>
        ))}
      </ol>
    </nav>
  );
};
NmBreadcrumb.Item = ({ label, href }) => href ? (
  <a href={href} className="text-sm font-semibold text-[#6c7a9c] hover:text-[#3d4f6e] transition-colors duration-150">{label}</a>
) : (
  <span className="text-sm font-semibold text-[#3d4f6e]" aria-current="page">{label}</span>
);
Last updated on

© 2026 UI Variants. Built with Nextra.