10 / 39
All 39 in 39 Tailwind CSS Breadcrumbs
- 01Tailwind Accessible Breadcrumb with Schema.org Microdata & ARIA
- 02Tailwind Responsive Collapsing Breadcrumb Bar with Container Queries
- 03Tailwind Adaptive Light & Dark Mode Breadcrumb Bar with Theme Tokens
- 04Tailwind E-Commerce Filter & Facet Breadcrumb with Removable Chips
- 05Tailwind Glassmorphism Floating Breadcrumb Pill with Shimmer Sweep
- 06Tailwind Neumorphic Soft UI Breadcrumb with Dual Box Shadows
- 07Tailwind Sticky Scroll-Shrink Breadcrumb Header with Scroll-Driven Animation
- 08Tailwind Material Design Flat Breadcrumb Bar with Ink Ripple
- 09Tailwind Isometric 3D Layered Breadcrumb with Extruded Tiles
- 10Tailwind Breadcrumb Bar with Built-In Dropdown Sibling Menus
- 11Tailwind Full-Width Block-Style Segmented Breadcrumb Bar
- 12Tailwind Accent-Colour Toggle Breadcrumb with Persisted Theme
- 13Tailwind Seamless Arrow-Cutout Breadcrumb Trail with clip-path
- 14Tailwind Compact Icon-Only Home Node Breadcrumb Bar
- 15Tailwind Segmented Rounded-Outline Pill Breadcrumb
- 16Tailwind Neumorphic Soft Inset-Shadow Breadcrumb Channel
- 17Tailwind CSS Grid Auto-Fitting Responsive Breadcrumb Trail
- 18Tailwind Holographic Shimmer Web3 Breadcrumb with Animated @property
- 19Tailwind SaaS Gradient-Text Breadcrumb Bar with Animated Clip
- 20Tailwind Marketplace Filter-Chip Breadcrumb with Icon Chips
- 21Tailwind Editorial Breadcrumb with Animated SVG Wave Underline
- 22Tailwind Developer Docs Breadcrumb with One-Click Path Copy
- 23Tailwind Modern Arrow Breadcrumb Bar using clip-path Polygons
- 24Tailwind Multi-Line Aligned Breadcrumb Layout with CSS Subgrid
- 25Tailwind Breadcrumb Links with Animated Underline Glow
- 26Tailwind Minimalist Breadcrumb with Swappable Masked SVG Separators
- 27Tailwind Multi-Step Checkout & Wizard Breadcrumb Indicator
- 28Tailwind Ribbon-Style Chevron Breadcrumb Trail
- 29Tailwind Pill-Shape Badge Breadcrumb Bar
- 30Tailwind Clean Line-Separator Minimalist Breadcrumbs
- 31Tailwind Gradient Background Glow Breadcrumb Bar
- 32Tailwind Floating Card Shadow Breadcrumb Navigation
- 33Tailwind Truncated Ellipsis Compact Mobile Breadcrumb
- 34Tailwind Inline Bullet-Dot Separator Breadcrumb
- 35Tailwind Skewed Parallelogram Breadcrumb Bar
- 36Tailwind Outline Border-Only Geometric Breadcrumbs
- 37Tailwind Circular Icon & Numbered Step Breadcrumbs
- 38Tailwind Frosted Glass Dark UI Breadcrumb Component
- 39Tailwind Micro-Interaction Animated Hover Breadcrumbs
Tailwind Breadcrumb Bar with Built-In Dropdown Sibling Menus
Power navigation: intermediate crumbs open a dropdown of sibling pages, built on native <details>/<summary> so it is keyboard-ready and script-free. The port reads the disclosure state with open: on the <details> and a direct-child arbitrary variant for the caret — never group-open:, which would match through nested disclosures.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tbc-10 w-full min-h-svh grid place-items-center bg-tbc10-bg font-tbc10-sans px-8 py-8">
<nav aria-label="Breadcrumb" class="w-[min(620px,100%)]">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="relative flex items-center"><a href="#" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-semibold text-tbc10-link no-underline transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Home</a></li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details open class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">Guides<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Tutorials</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">References</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Recipes</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Changelog</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">CSS<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">HTML</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">JavaScript</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Accessibility</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep"><a href="#" aria-current="page" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-bold text-tbc10-strong no-underline focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Dropdown Breadcrumbs</a></li>
</ol>
</nav>
</section><section class="tbc-10 w-full min-h-svh grid place-items-center bg-tbc10-bg font-tbc10-sans px-8 py-8">
<nav aria-label="Breadcrumb" class="w-[min(620px,100%)]">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="relative flex items-center"><a href="#" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-semibold text-tbc10-link no-underline transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Home</a></li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details open class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">Guides<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Tutorials</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">References</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Recipes</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Changelog</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">CSS<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">HTML</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">JavaScript</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Accessibility</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep"><a href="#" aria-current="page" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-bold text-tbc10-strong no-underline focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Dropdown Breadcrumbs</a></li>
</ol>
</nav>
</section>@import "tailwindcss";
@theme {
--color-tbc10-bg: #fbfbfd;
--color-tbc10-bg: oklch(0.98 0.004 265);
--color-tbc10-edge: #e4e5ec;
--color-tbc10-edge: oklch(0.9 0.008 265);
--color-tbc10-tint: #eceef8;
--color-tbc10-tint: oklch(0.94 0.02 265);
--color-tbc10-link: #5b64ab;
--color-tbc10-link: oklch(0.48 0.08 265);
--color-tbc10-linkhover: #3b4396;
--color-tbc10-linkhover: oklch(0.36 0.13 265);
--color-tbc10-menuink: #5a5d68;
--color-tbc10-menuink: oklch(0.4 0.02 265);
--color-tbc10-strong: #35383f;
--color-tbc10-strong: oklch(0.28 0.02 265);
--color-tbc10-sep: #adb0ba;
--color-tbc10-sep: oklch(0.72 0.02 265);
--color-tbc10-acc: #5a68cc;
--color-tbc10-acc: oklch(0.55 0.15 265);
--font-tbc10-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-10 {
width: 100%;
min-height: 100svh;
}
/* ::details-content has no variant form, and interpolate-size is a property, not a
utility. The progressive height tween therefore stays CSS. */
.tbc-10 details::details-content {
height: 0;
overflow: hidden;
transition: height .2s ease, content-visibility .2s ease allow-discrete;
interpolate-size: allow-keywords;
}
.tbc-10 details[open]::details-content {
height: auto;
}
@media (prefers-reduced-motion: reduce) {
.tbc-10 details::details-content {
transition: none;
}
}@import "tailwindcss";
@theme {
--color-tbc10-bg: #fbfbfd;
--color-tbc10-bg: oklch(0.98 0.004 265);
--color-tbc10-edge: #e4e5ec;
--color-tbc10-edge: oklch(0.9 0.008 265);
--color-tbc10-tint: #eceef8;
--color-tbc10-tint: oklch(0.94 0.02 265);
--color-tbc10-link: #5b64ab;
--color-tbc10-link: oklch(0.48 0.08 265);
--color-tbc10-linkhover: #3b4396;
--color-tbc10-linkhover: oklch(0.36 0.13 265);
--color-tbc10-menuink: #5a5d68;
--color-tbc10-menuink: oklch(0.4 0.02 265);
--color-tbc10-strong: #35383f;
--color-tbc10-strong: oklch(0.28 0.02 265);
--color-tbc10-sep: #adb0ba;
--color-tbc10-sep: oklch(0.72 0.02 265);
--color-tbc10-acc: #5a68cc;
--color-tbc10-acc: oklch(0.55 0.15 265);
--font-tbc10-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-10 {
width: 100%;
min-height: 100svh;
}
/* ::details-content has no variant form, and interpolate-size is a property, not a
utility. The progressive height tween therefore stays CSS. */
.tbc-10 details::details-content {
height: 0;
overflow: hidden;
transition: height .2s ease, content-visibility .2s ease allow-discrete;
interpolate-size: allow-keywords;
}
.tbc-10 details[open]::details-content {
height: auto;
}
@media (prefers-reduced-motion: reduce) {
.tbc-10 details::details-content {
transition: none;
}
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@theme {
--color-tbc10-bg: #fbfbfd;
--color-tbc10-bg: oklch(0.98 0.004 265);
--color-tbc10-edge: #e4e5ec;
--color-tbc10-edge: oklch(0.9 0.008 265);
--color-tbc10-tint: #eceef8;
--color-tbc10-tint: oklch(0.94 0.02 265);
--color-tbc10-link: #5b64ab;
--color-tbc10-link: oklch(0.48 0.08 265);
--color-tbc10-linkhover: #3b4396;
--color-tbc10-linkhover: oklch(0.36 0.13 265);
--color-tbc10-menuink: #5a5d68;
--color-tbc10-menuink: oklch(0.4 0.02 265);
--color-tbc10-strong: #35383f;
--color-tbc10-strong: oklch(0.28 0.02 265);
--color-tbc10-sep: #adb0ba;
--color-tbc10-sep: oklch(0.72 0.02 265);
--color-tbc10-acc: #5a68cc;
--color-tbc10-acc: oklch(0.55 0.15 265);
--font-tbc10-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-10 {
width: 100%;
min-height: 100svh;
}
/* ::details-content has no variant form, and interpolate-size is a property, not a
utility. The progressive height tween therefore stays CSS. */
.tbc-10 details::details-content {
height: 0;
overflow: hidden;
transition: height .2s ease, content-visibility .2s ease allow-discrete;
interpolate-size: allow-keywords;
}
.tbc-10 details[open]::details-content {
height: auto;
}
@media (prefers-reduced-motion: reduce) {
.tbc-10 details::details-content {
transition: none;
}
}@import "tailwindcss";
@theme {
--color-tbc10-bg: #fbfbfd;
--color-tbc10-bg: oklch(0.98 0.004 265);
--color-tbc10-edge: #e4e5ec;
--color-tbc10-edge: oklch(0.9 0.008 265);
--color-tbc10-tint: #eceef8;
--color-tbc10-tint: oklch(0.94 0.02 265);
--color-tbc10-link: #5b64ab;
--color-tbc10-link: oklch(0.48 0.08 265);
--color-tbc10-linkhover: #3b4396;
--color-tbc10-linkhover: oklch(0.36 0.13 265);
--color-tbc10-menuink: #5a5d68;
--color-tbc10-menuink: oklch(0.4 0.02 265);
--color-tbc10-strong: #35383f;
--color-tbc10-strong: oklch(0.28 0.02 265);
--color-tbc10-sep: #adb0ba;
--color-tbc10-sep: oklch(0.72 0.02 265);
--color-tbc10-acc: #5a68cc;
--color-tbc10-acc: oklch(0.55 0.15 265);
--font-tbc10-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-10 {
width: 100%;
min-height: 100svh;
}
/* ::details-content has no variant form, and interpolate-size is a property, not a
utility. The progressive height tween therefore stays CSS. */
.tbc-10 details::details-content {
height: 0;
overflow: hidden;
transition: height .2s ease, content-visibility .2s ease allow-discrete;
interpolate-size: allow-keywords;
}
.tbc-10 details[open]::details-content {
height: auto;
}
@media (prefers-reduced-motion: reduce) {
.tbc-10 details::details-content {
transition: none;
}
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
[&[open]>summary>svg]:rotate-180instead ofgroup-open:rotate-180is the one decision in this demo that matters. The group form matches through every open ancestor, so nested disclosures rotate each other's carets — a bug that only appears once the menu grows a second level.- Both marker shims are arbitrary selectors rather than CSS, because they belong to the summary and travel with it when the crumb is copied.
- UI change from the CSS original: the hover-opens-the-panel media query is dropped. A dropdown that opens on hover and closes on exit is unusable with a trackpad at speed and unreachable on touch; the native click/Enter disclosure is better navigation.
Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Breadcrumb Bar with Built-In Dropdown Sibling Menus
Source: https://codefronts.com/navigation/tailwind-css-breadcrumbs/tailwind-breadcrumb-bar-dropdown-sibling-menus/
Power navigation: intermediate crumbs open a dropdown of sibling pages, built on native <details>/<summary> so it is keyboard-ready and script-free. The port reads the disclosure state with open: on the <details> and a direct-child arbitrary variant for the caret — never group-open:, which would match through nested disclosures.
## HTML
```html
<section class="tbc-10 w-full min-h-svh grid place-items-center bg-tbc10-bg font-tbc10-sans px-8 py-8">
<nav aria-label="Breadcrumb" class="w-[min(620px,100%)]">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="relative flex items-center"><a href="#" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-semibold text-tbc10-link no-underline transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Home</a></li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details open class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">Guides<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Tutorials</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">References</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Recipes</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Changelog</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">CSS<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">HTML</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">JavaScript</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Accessibility</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep"><a href="#" aria-current="page" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-bold text-tbc10-strong no-underline focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Dropdown Breadcrumbs</a></li>
</ol>
</nav>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbc10-bg: #fbfbfd;
--color-tbc10-bg: oklch(0.98 0.004 265);
--color-tbc10-edge: #e4e5ec;
--color-tbc10-edge: oklch(0.9 0.008 265);
--color-tbc10-tint: #eceef8;
--color-tbc10-tint: oklch(0.94 0.02 265);
--color-tbc10-link: #5b64ab;
--color-tbc10-link: oklch(0.48 0.08 265);
--color-tbc10-linkhover: #3b4396;
--color-tbc10-linkhover: oklch(0.36 0.13 265);
--color-tbc10-menuink: #5a5d68;
--color-tbc10-menuink: oklch(0.4 0.02 265);
--color-tbc10-strong: #35383f;
--color-tbc10-strong: oklch(0.28 0.02 265);
--color-tbc10-sep: #adb0ba;
--color-tbc10-sep: oklch(0.72 0.02 265);
--color-tbc10-acc: #5a68cc;
--color-tbc10-acc: oklch(0.55 0.15 265);
--font-tbc10-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-10 {
width: 100%;
min-height: 100svh;
}
/* ::details-content has no variant form, and interpolate-size is a property, not a
utility. The progressive height tween therefore stays CSS. */
.tbc-10 details::details-content {
height: 0;
overflow: hidden;
transition: height .2s ease, content-visibility .2s ease allow-discrete;
interpolate-size: allow-keywords;
}
.tbc-10 details[open]::details-content {
height: auto;
}
@media (prefers-reduced-motion: reduce) {
.tbc-10 details::details-content {
transition: none;
}
}
```Here's a working CSS demo from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Tailwind Breadcrumb Bar with Built-In Dropdown Sibling Menus
Source: https://codefronts.com/navigation/tailwind-css-breadcrumbs/tailwind-breadcrumb-bar-dropdown-sibling-menus/
Power navigation: intermediate crumbs open a dropdown of sibling pages, built on native <details>/<summary> so it is keyboard-ready and script-free. The port reads the disclosure state with open: on the <details> and a direct-child arbitrary variant for the caret — never group-open:, which would match through nested disclosures.
## HTML
```html
<section class="tbc-10 w-full min-h-svh grid place-items-center bg-tbc10-bg font-tbc10-sans px-8 py-8">
<nav aria-label="Breadcrumb" class="w-[min(620px,100%)]">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="relative flex items-center"><a href="#" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-semibold text-tbc10-link no-underline transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Home</a></li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details open class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">Guides<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Tutorials</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">References</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Recipes</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Changelog</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep">
<details class="[&[open]>summary>svg]:rotate-180">
<summary class="inline-flex items-center gap-1 min-h-9 px-2 rounded-[7px] list-none cursor-pointer text-[13.5px] font-semibold text-tbc10-link transition-colors duration-150 hover:text-tbc10-linkhover hover:bg-tbc10-tint focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2 [&::-webkit-details-marker]:hidden [&::marker]:content-['']">CSS<svg viewBox="0 0 24 24" aria-hidden="true" class="w-3.25 h-3.25 fill-none stroke-current [stroke-width:2.2] [stroke-linecap:round] [stroke-linejoin:round] transition-[rotate] duration-200 motion-reduce:transition-none"><path d="M6 9l6 6 6-6"/></svg></summary>
<div role="group" aria-label="Sibling sections" class="absolute top-[calc(100%+6px)] left-0 z-20 flex flex-col min-w-[170px] p-1.5 rounded-xl bg-white border border-tbc10-edge shadow-[0_10px_30px_oklch(0.25_0.05_265/0.14)]">
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">HTML</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">JavaScript</a>
<a href="#" class="flex items-center min-h-9 px-2.5 rounded-[7px] text-[13.5px] font-medium text-tbc10-menuink no-underline transition-colors duration-150 hover:bg-[color-mix(in_oklab,var(--color-tbc10-acc)_12%,transparent)] hover:text-tbc10-acc focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:-outline-offset-2">Accessibility</a>
</div>
</details>
</li>
<li class="relative flex items-center before:content-['\203A'] before:mx-1.5 before:text-tbc10-sep"><a href="#" aria-current="page" class="flex items-center min-h-9 px-2 rounded-[7px] text-[13.5px] font-bold text-tbc10-strong no-underline focus-visible:outline-2 focus-visible:outline-tbc10-acc focus-visible:outline-offset-2">Dropdown Breadcrumbs</a></li>
</ol>
</nav>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbc10-bg: #fbfbfd;
--color-tbc10-bg: oklch(0.98 0.004 265);
--color-tbc10-edge: #e4e5ec;
--color-tbc10-edge: oklch(0.9 0.008 265);
--color-tbc10-tint: #eceef8;
--color-tbc10-tint: oklch(0.94 0.02 265);
--color-tbc10-link: #5b64ab;
--color-tbc10-link: oklch(0.48 0.08 265);
--color-tbc10-linkhover: #3b4396;
--color-tbc10-linkhover: oklch(0.36 0.13 265);
--color-tbc10-menuink: #5a5d68;
--color-tbc10-menuink: oklch(0.4 0.02 265);
--color-tbc10-strong: #35383f;
--color-tbc10-strong: oklch(0.28 0.02 265);
--color-tbc10-sep: #adb0ba;
--color-tbc10-sep: oklch(0.72 0.02 265);
--color-tbc10-acc: #5a68cc;
--color-tbc10-acc: oklch(0.55 0.15 265);
--font-tbc10-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-10 {
width: 100%;
min-height: 100svh;
}
/* ::details-content has no variant form, and interpolate-size is a property, not a
utility. The progressive height tween therefore stays CSS. */
.tbc-10 details::details-content {
height: 0;
overflow: hidden;
transition: height .2s ease, content-visibility .2s ease allow-discrete;
interpolate-size: allow-keywords;
}
.tbc-10 details[open]::details-content {
height: auto;
}
@media (prefers-reduced-motion: reduce) {
.tbc-10 details::details-content {
transition: none;
}
}
```How this works
The disclosure stays native. <summary> is focusable, Enter and Space toggle it, and screen readers announce expanded state with no ARIA at all. The port changes only where the styles live: open: variants on the element, the marker shims as arbitrary selectors, and the caret rotation as a direct-child variant.
Why not group-open:. group-open: matches if ANY open ancestor carries group, so a submenu inside an open parent would rotate both carets. [&[open]>summary>svg] binds to this disclosure's own summary and nothing deeper — the same trap the hamburger collection documents on its accordion demo.
Height animation is progressive. ::details-content with interpolate-size:allow-keywords tweens height:0 to auto where supported, and elsewhere the panel simply appears. Both paths stay in the stylesheet, because neither pseudo-element nor interpolate-size has a variant form.
Make it yours
- Menu width:
min-w-[170px]on the panel; dropleft-0forright-0near the end of a long trail. - Accent:
--color-tbc10-accdrives focus rings and the menu hover tint. - For click-only behaviour, delete nothing —
<details>is already click-driven; the CSS collection's hover-open media query is deliberately not ported.
Gotchas — read before shipping
- Remove BOTH markers:
::-webkit-details-markerfor Safari and::markerfor everyone else, or one browser shows a stray triangle. - The open panel needs a
relativeancestor at the crumb level, not at the list level, or every menu opens from the same left edge. - Escape does not close a native
<details>. If you need that, it is four lines of JS — the honest cost of keeping the demo script-free. - Dropdowns inside a breadcrumb are for wide screens; on mobile the panel can overflow the viewport. Add
max-w-[calc(100vw-2rem)]if the trail is deep.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 129+ | not yet | not yet | 129+ |
Floor set by oklch(), color-mix(), interpolate-size as this demo is written. The core technique itself goes back further — Chrome 111+.
<details> works everywhere. The height tween needs ::details-content and interpolate-size (Chrome 131+, Safari 18.2+) and degrades to an instant open.