13 / 16
All 16 in 16 Tailwind CSS Mobile Navbars & Menus
- 01Tailwind CSS Hamburger Menu with Slide-Out Drawer (No JavaScript)
- 02Tailwind Full-Screen Overlay Menu with Circle Reveal Animation
- 03Tailwind CSS iOS Bottom Tab Bar Navigation
- 04Tailwind Animated Hamburger to X Icon with Dropdown Menu
- 05Tailwind Radial Menu — Circular FAB Fan-Out Navigation
- 06Tailwind Swipeable Sidebar Menu with Touch Gestures
- 07Tailwind Floating Action Button (FAB) Speed Dial Menu
- 08Tailwind Tabs with Animated Sliding Pill Indicator
- 09Tailwind Mobile Mega Menu with Accordion Dropdowns
- 10Tailwind Glassmorphism Sidebar Navigation Drawer
- 11Tailwind Cyberpunk Neon Full-Screen Menu
- 12Tailwind Carousel with Dot Navigation, Swipe & Autoplay Progress
- 13Tailwind Collapsible Breadcrumb with Ellipsis Dropdown
- 14Tailwind Split-Screen Sidebar Category Navigation
- 15Tailwind Command Palette — Cmd+K Search Menu
- 16Tailwind Neumorphic Bottom Navigation Bar
Tailwind Collapsible Breadcrumb with Ellipsis Dropdown
A file-explorer header whose breadcrumb collapses to Home › ··· › Documents; the ellipsis opens the hidden ancestors as a dropdown that scales out from the button. The port anchors the menu to the ellipsis itself (not a magic top: 88px), adds the click-outside scrim the original's gotchas asked for, and uses real <nav><ol> breadcrumb semantics. Zero JavaScript.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tmn-13 w-full min-h-svh grid place-items-center bg-tmn13-stage px-4 py-6 font-tmn13-sans antialiased" aria-label="Tailwind collapsible breadcrumb demo">
<div class="group relative flex h-[min(667px,calc(100svh-3rem))] w-full max-w-[375px] flex-col overflow-hidden rounded-[2.25rem] bg-tmn13-bg text-tmn13-ink shadow-[0_40px_100px_-30px_oklch(0_0_0/0.45)]">
<input type="checkbox" id="tmn-13-crumbs" class="peer sr-only" aria-label="Show full path">
<label for="tmn-13-crumbs" aria-hidden="true" class="pointer-events-none absolute inset-0 z-10 group-has-checked:pointer-events-auto"></label>
<header class="relative z-20 flex-none border-b border-tmn13-line bg-white px-4 pt-4 pb-3">
<div class="mb-2.5 flex items-center gap-2">
<a href="#" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Back</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="m15 6-6 6 6 6"/></svg></a>
<h1 class="flex-1 text-[17px] font-semibold">Documents</h1>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Search</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg></button>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">More</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/></svg></button>
</div>
<nav aria-label="Breadcrumb">
<ol class="flex items-center text-[13px] font-medium text-tmn13-mut">
<li><a href="#" class="rounded-md px-1.5 py-1 text-tmn13-acc hover:bg-tmn13-acc/8">Home</a></li>
<li class="relative flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']">
<label for="tmn-13-crumbs" class="grid h-7 min-w-9 cursor-pointer place-items-center rounded-md border border-tmn13-line bg-tmn13-bg text-xs font-bold tracking-[0.1em] transition-colors hover:border-tmn13-acc hover:bg-tmn13-acc hover:text-white group-has-checked:border-tmn13-acc group-has-checked:bg-tmn13-acc group-has-checked:text-white peer-focus-visible:ring-2 peer-focus-visible:ring-tmn13-acc peer-focus-visible:ring-offset-1"><span aria-hidden="true">···</span><span class="sr-only">Show 4 hidden folders</span></label>
<div class="invisible absolute top-full left-3 z-20 mt-2 min-w-48 origin-top-left -translate-y-2 scale-95 overflow-hidden rounded-xl border border-tmn13-line bg-white py-1 opacity-0 shadow-[0_12px_32px_-8px_oklch(0_0_0/0.18)] transition duration-200 group-has-checked:visible group-has-checked:translate-y-0 group-has-checked:scale-100 group-has-checked:opacity-100">
<a href="#" class="flex min-h-11 items-center gap-2.5 px-3.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg>My Drive</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-6 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Work Projects</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-8.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>2026</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-11 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Q3 Reports</a>
</div>
</li>
<li class="flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']"><span aria-current="page" class="px-1 font-semibold text-tmn13-ink">Documents</span></li>
</ol>
</nav>
</header>
<main class="flex-1 overflow-y-auto">
<p class="flex items-center justify-between px-4 pt-4 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Folders <a href="#" class="text-xs font-semibold tracking-normal text-tmn13-acc normal-case">+ New</a></p>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Design Assets</span><span class="text-xs text-tmn13-mut">48 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Client Reports</span><span class="text-xs text-tmn13-mut">12 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Contracts</span><span class="text-xs text-tmn13-mut">7 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<p class="px-4 pt-5 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Recent files</p>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-red-50 text-[10px] font-bold text-red-700">PDF</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Q3 Summary Report.pdf</span><span class="block text-xs text-tmn13-mut">2.4 MB · Today, 14:32</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-green-50 text-[10px] font-bold text-green-700">XLS</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Analytics Dashboard.xlsx</span><span class="block text-xs text-tmn13-mut">840 KB · Yesterday</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-violet-50 text-[10px] font-bold text-violet-700">FIG</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Brand Guidelines.fig</span><span class="block text-xs text-tmn13-mut">18 MB · Sep 3</span></span></a>
</main>
<footer class="flex flex-none items-center gap-3 border-t border-tmn13-acc/15 bg-tmn13-acc/5 px-4 py-3">
<span class="grid size-9 place-items-center rounded-xl bg-tmn13-acc text-white"><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg></span>
<div class="flex-1"><p class="text-[13px] font-semibold">24.8 GB of 50 GB used</p><div class="mt-1.5 h-1 overflow-hidden rounded-full bg-tmn13-acc/15"><div class="h-full w-1/2 rounded-full bg-tmn13-acc"></div></div></div>
<a href="#" class="grid min-h-9 place-items-center rounded-lg border border-tmn13-acc/30 px-3 text-xs font-semibold text-tmn13-acc">Upgrade</a>
</footer>
</div>
</section><section class="tmn-13 w-full min-h-svh grid place-items-center bg-tmn13-stage px-4 py-6 font-tmn13-sans antialiased" aria-label="Tailwind collapsible breadcrumb demo">
<div class="group relative flex h-[min(667px,calc(100svh-3rem))] w-full max-w-[375px] flex-col overflow-hidden rounded-[2.25rem] bg-tmn13-bg text-tmn13-ink shadow-[0_40px_100px_-30px_oklch(0_0_0/0.45)]">
<input type="checkbox" id="tmn-13-crumbs" class="peer sr-only" aria-label="Show full path">
<label for="tmn-13-crumbs" aria-hidden="true" class="pointer-events-none absolute inset-0 z-10 group-has-checked:pointer-events-auto"></label>
<header class="relative z-20 flex-none border-b border-tmn13-line bg-white px-4 pt-4 pb-3">
<div class="mb-2.5 flex items-center gap-2">
<a href="#" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Back</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="m15 6-6 6 6 6"/></svg></a>
<h1 class="flex-1 text-[17px] font-semibold">Documents</h1>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Search</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg></button>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">More</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/></svg></button>
</div>
<nav aria-label="Breadcrumb">
<ol class="flex items-center text-[13px] font-medium text-tmn13-mut">
<li><a href="#" class="rounded-md px-1.5 py-1 text-tmn13-acc hover:bg-tmn13-acc/8">Home</a></li>
<li class="relative flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']">
<label for="tmn-13-crumbs" class="grid h-7 min-w-9 cursor-pointer place-items-center rounded-md border border-tmn13-line bg-tmn13-bg text-xs font-bold tracking-[0.1em] transition-colors hover:border-tmn13-acc hover:bg-tmn13-acc hover:text-white group-has-checked:border-tmn13-acc group-has-checked:bg-tmn13-acc group-has-checked:text-white peer-focus-visible:ring-2 peer-focus-visible:ring-tmn13-acc peer-focus-visible:ring-offset-1"><span aria-hidden="true">···</span><span class="sr-only">Show 4 hidden folders</span></label>
<div class="invisible absolute top-full left-3 z-20 mt-2 min-w-48 origin-top-left -translate-y-2 scale-95 overflow-hidden rounded-xl border border-tmn13-line bg-white py-1 opacity-0 shadow-[0_12px_32px_-8px_oklch(0_0_0/0.18)] transition duration-200 group-has-checked:visible group-has-checked:translate-y-0 group-has-checked:scale-100 group-has-checked:opacity-100">
<a href="#" class="flex min-h-11 items-center gap-2.5 px-3.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg>My Drive</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-6 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Work Projects</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-8.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>2026</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-11 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Q3 Reports</a>
</div>
</li>
<li class="flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']"><span aria-current="page" class="px-1 font-semibold text-tmn13-ink">Documents</span></li>
</ol>
</nav>
</header>
<main class="flex-1 overflow-y-auto">
<p class="flex items-center justify-between px-4 pt-4 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Folders <a href="#" class="text-xs font-semibold tracking-normal text-tmn13-acc normal-case">+ New</a></p>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Design Assets</span><span class="text-xs text-tmn13-mut">48 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Client Reports</span><span class="text-xs text-tmn13-mut">12 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Contracts</span><span class="text-xs text-tmn13-mut">7 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<p class="px-4 pt-5 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Recent files</p>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-red-50 text-[10px] font-bold text-red-700">PDF</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Q3 Summary Report.pdf</span><span class="block text-xs text-tmn13-mut">2.4 MB · Today, 14:32</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-green-50 text-[10px] font-bold text-green-700">XLS</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Analytics Dashboard.xlsx</span><span class="block text-xs text-tmn13-mut">840 KB · Yesterday</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-violet-50 text-[10px] font-bold text-violet-700">FIG</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Brand Guidelines.fig</span><span class="block text-xs text-tmn13-mut">18 MB · Sep 3</span></span></a>
</main>
<footer class="flex flex-none items-center gap-3 border-t border-tmn13-acc/15 bg-tmn13-acc/5 px-4 py-3">
<span class="grid size-9 place-items-center rounded-xl bg-tmn13-acc text-white"><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg></span>
<div class="flex-1"><p class="text-[13px] font-semibold">24.8 GB of 50 GB used</p><div class="mt-1.5 h-1 overflow-hidden rounded-full bg-tmn13-acc/15"><div class="h-full w-1/2 rounded-full bg-tmn13-acc"></div></div></div>
<a href="#" class="grid min-h-9 place-items-center rounded-lg border border-tmn13-acc/30 px-3 text-xs font-semibold text-tmn13-acc">Upgrade</a>
</footer>
</div>
</section>@import "tailwindcss";
@theme {
--color-tmn13-stage: #e4e4e7;
--color-tmn13-stage: oklch(0.92 0.004 286);
--color-tmn13-bg: #fafafa;
--color-tmn13-bg: oklch(0.985 0 0);
--color-tmn13-line: #e4e4e7;
--color-tmn13-line: oklch(0.92 0.004 286);
--color-tmn13-line2: #b4b4bb;
--color-tmn13-line2: oklch(0.77 0.01 286);
--color-tmn13-ink: #18181b;
--color-tmn13-ink: oklch(0.21 0.006 285);
--color-tmn13-mut: #63636b;
--color-tmn13-mut: oklch(0.5 0.012 286);
--color-tmn13-acc: #2563eb;
--color-tmn13-acc: oklch(0.55 0.22 263);
--font-tmn13-sans: 'Instrument Sans', system-ui, sans-serif;
}
/* Icon base: utilities (fill-*, text-*) still win because this sits in the base layer. */
@layer base {
.tmn-13 svg {
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
flex: none;
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in utilities, so the stage is
sized before the browser build compiles. */
.tmn-13 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tmn13-stage: #e4e4e7;
--color-tmn13-stage: oklch(0.92 0.004 286);
--color-tmn13-bg: #fafafa;
--color-tmn13-bg: oklch(0.985 0 0);
--color-tmn13-line: #e4e4e7;
--color-tmn13-line: oklch(0.92 0.004 286);
--color-tmn13-line2: #b4b4bb;
--color-tmn13-line2: oklch(0.77 0.01 286);
--color-tmn13-ink: #18181b;
--color-tmn13-ink: oklch(0.21 0.006 285);
--color-tmn13-mut: #63636b;
--color-tmn13-mut: oklch(0.5 0.012 286);
--color-tmn13-acc: #2563eb;
--color-tmn13-acc: oklch(0.55 0.22 263);
--font-tmn13-sans: 'Instrument Sans', system-ui, sans-serif;
}
/* Icon base: utilities (fill-*, text-*) still win because this sits in the base layer. */
@layer base {
.tmn-13 svg {
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
flex: none;
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in utilities, so the stage is
sized before the browser build compiles. */
.tmn-13 {
width: 100%;
min-height: 100svh;
}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-tmn13-stage: #e4e4e7;
--color-tmn13-stage: oklch(0.92 0.004 286);
--color-tmn13-bg: #fafafa;
--color-tmn13-bg: oklch(0.985 0 0);
--color-tmn13-line: #e4e4e7;
--color-tmn13-line: oklch(0.92 0.004 286);
--color-tmn13-line2: #b4b4bb;
--color-tmn13-line2: oklch(0.77 0.01 286);
--color-tmn13-ink: #18181b;
--color-tmn13-ink: oklch(0.21 0.006 285);
--color-tmn13-mut: #63636b;
--color-tmn13-mut: oklch(0.5 0.012 286);
--color-tmn13-acc: #2563eb;
--color-tmn13-acc: oklch(0.55 0.22 263);
--font-tmn13-sans: 'Instrument Sans', system-ui, sans-serif;
}
/* Icon base: utilities (fill-*, text-*) still win because this sits in the base layer. */
@layer base {
.tmn-13 svg {
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
flex: none;
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in utilities, so the stage is
sized before the browser build compiles. */
.tmn-13 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tmn13-stage: #e4e4e7;
--color-tmn13-stage: oklch(0.92 0.004 286);
--color-tmn13-bg: #fafafa;
--color-tmn13-bg: oklch(0.985 0 0);
--color-tmn13-line: #e4e4e7;
--color-tmn13-line: oklch(0.92 0.004 286);
--color-tmn13-line2: #b4b4bb;
--color-tmn13-line2: oklch(0.77 0.01 286);
--color-tmn13-ink: #18181b;
--color-tmn13-ink: oklch(0.21 0.006 285);
--color-tmn13-mut: #63636b;
--color-tmn13-mut: oklch(0.5 0.012 286);
--color-tmn13-acc: #2563eb;
--color-tmn13-acc: oklch(0.55 0.22 263);
--font-tmn13-sans: 'Instrument Sans', system-ui, sans-serif;
}
/* Icon base: utilities (fill-*, text-*) still win because this sits in the base layer. */
@layer base {
.tmn-13 svg {
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
flex: none;
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in utilities, so the stage is
sized before the browser build compiles. */
.tmn-13 {
width: 100%;
min-height: 100svh;
}<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=Instrument+Sans:wght@400..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=Instrument+Sans:wght@400..700&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
- The dropdown's
position:absolute; top:88pxon the app bar becameabsolute top-fullinside the ellipsis<li>— it follows the button whatever the header height. - Separator
<span>s becamebefore:content-['›'], so assistive tech reads only the path, inside a real<nav aria-label="Breadcrumb"><ol>witharia-current="page". - UI upgrade from the CSS original: a transparent scrim label closes the dropdown on outside taps (the original's listed gotcha), the ellipsis stays highlighted while open, and the hidden ancestors are indented to show depth.
- UI upgrade: file-type badges replace emoji, header buttons grew from 32px to 40px with labels, the storage footer gained a usage bar, and muted copy rose from zinc-500 (4.6:1) to 5.9:1.
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 Collapsible Breadcrumb with Ellipsis Dropdown
Source: https://codefronts.com/navigation/tailwind-css-mobile-navbar/tailwind-collapsible-breadcrumb-ellipsis-dropdown/
A file-explorer header whose breadcrumb collapses to Home › ··· › Documents; the ellipsis opens the hidden ancestors as a dropdown that scales out from the button. The port anchors the menu to the ellipsis itself (not a magic top: 88px), adds the click-outside scrim the original's gotchas asked for, and uses real <nav><ol> breadcrumb semantics. Zero JavaScript.
## HTML
```html
<section class="tmn-13 w-full min-h-svh grid place-items-center bg-tmn13-stage px-4 py-6 font-tmn13-sans antialiased" aria-label="Tailwind collapsible breadcrumb demo">
<div class="group relative flex h-[min(667px,calc(100svh-3rem))] w-full max-w-[375px] flex-col overflow-hidden rounded-[2.25rem] bg-tmn13-bg text-tmn13-ink shadow-[0_40px_100px_-30px_oklch(0_0_0/0.45)]">
<input type="checkbox" id="tmn-13-crumbs" class="peer sr-only" aria-label="Show full path">
<label for="tmn-13-crumbs" aria-hidden="true" class="pointer-events-none absolute inset-0 z-10 group-has-checked:pointer-events-auto"></label>
<header class="relative z-20 flex-none border-b border-tmn13-line bg-white px-4 pt-4 pb-3">
<div class="mb-2.5 flex items-center gap-2">
<a href="#" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Back</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="m15 6-6 6 6 6"/></svg></a>
<h1 class="flex-1 text-[17px] font-semibold">Documents</h1>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Search</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg></button>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">More</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/></svg></button>
</div>
<nav aria-label="Breadcrumb">
<ol class="flex items-center text-[13px] font-medium text-tmn13-mut">
<li><a href="#" class="rounded-md px-1.5 py-1 text-tmn13-acc hover:bg-tmn13-acc/8">Home</a></li>
<li class="relative flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']">
<label for="tmn-13-crumbs" class="grid h-7 min-w-9 cursor-pointer place-items-center rounded-md border border-tmn13-line bg-tmn13-bg text-xs font-bold tracking-[0.1em] transition-colors hover:border-tmn13-acc hover:bg-tmn13-acc hover:text-white group-has-checked:border-tmn13-acc group-has-checked:bg-tmn13-acc group-has-checked:text-white peer-focus-visible:ring-2 peer-focus-visible:ring-tmn13-acc peer-focus-visible:ring-offset-1"><span aria-hidden="true">···</span><span class="sr-only">Show 4 hidden folders</span></label>
<div class="invisible absolute top-full left-3 z-20 mt-2 min-w-48 origin-top-left -translate-y-2 scale-95 overflow-hidden rounded-xl border border-tmn13-line bg-white py-1 opacity-0 shadow-[0_12px_32px_-8px_oklch(0_0_0/0.18)] transition duration-200 group-has-checked:visible group-has-checked:translate-y-0 group-has-checked:scale-100 group-has-checked:opacity-100">
<a href="#" class="flex min-h-11 items-center gap-2.5 px-3.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg>My Drive</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-6 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Work Projects</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-8.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>2026</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-11 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Q3 Reports</a>
</div>
</li>
<li class="flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']"><span aria-current="page" class="px-1 font-semibold text-tmn13-ink">Documents</span></li>
</ol>
</nav>
</header>
<main class="flex-1 overflow-y-auto">
<p class="flex items-center justify-between px-4 pt-4 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Folders <a href="#" class="text-xs font-semibold tracking-normal text-tmn13-acc normal-case">+ New</a></p>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Design Assets</span><span class="text-xs text-tmn13-mut">48 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Client Reports</span><span class="text-xs text-tmn13-mut">12 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Contracts</span><span class="text-xs text-tmn13-mut">7 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<p class="px-4 pt-5 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Recent files</p>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-red-50 text-[10px] font-bold text-red-700">PDF</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Q3 Summary Report.pdf</span><span class="block text-xs text-tmn13-mut">2.4 MB · Today, 14:32</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-green-50 text-[10px] font-bold text-green-700">XLS</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Analytics Dashboard.xlsx</span><span class="block text-xs text-tmn13-mut">840 KB · Yesterday</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-violet-50 text-[10px] font-bold text-violet-700">FIG</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Brand Guidelines.fig</span><span class="block text-xs text-tmn13-mut">18 MB · Sep 3</span></span></a>
</main>
<footer class="flex flex-none items-center gap-3 border-t border-tmn13-acc/15 bg-tmn13-acc/5 px-4 py-3">
<span class="grid size-9 place-items-center rounded-xl bg-tmn13-acc text-white"><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg></span>
<div class="flex-1"><p class="text-[13px] font-semibold">24.8 GB of 50 GB used</p><div class="mt-1.5 h-1 overflow-hidden rounded-full bg-tmn13-acc/15"><div class="h-full w-1/2 rounded-full bg-tmn13-acc"></div></div></div>
<a href="#" class="grid min-h-9 place-items-center rounded-lg border border-tmn13-acc/30 px-3 text-xs font-semibold text-tmn13-acc">Upgrade</a>
</footer>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tmn13-stage: #e4e4e7;
--color-tmn13-stage: oklch(0.92 0.004 286);
--color-tmn13-bg: #fafafa;
--color-tmn13-bg: oklch(0.985 0 0);
--color-tmn13-line: #e4e4e7;
--color-tmn13-line: oklch(0.92 0.004 286);
--color-tmn13-line2: #b4b4bb;
--color-tmn13-line2: oklch(0.77 0.01 286);
--color-tmn13-ink: #18181b;
--color-tmn13-ink: oklch(0.21 0.006 285);
--color-tmn13-mut: #63636b;
--color-tmn13-mut: oklch(0.5 0.012 286);
--color-tmn13-acc: #2563eb;
--color-tmn13-acc: oklch(0.55 0.22 263);
--font-tmn13-sans: 'Instrument Sans', system-ui, sans-serif;
}
/* Icon base: utilities (fill-*, text-*) still win because this sits in the base layer. */
@layer base {
.tmn-13 svg {
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
flex: none;
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in utilities, so the stage is
sized before the browser build compiles. */
.tmn-13 {
width: 100%;
min-height: 100svh;
}
```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 Collapsible Breadcrumb with Ellipsis Dropdown
Source: https://codefronts.com/navigation/tailwind-css-mobile-navbar/tailwind-collapsible-breadcrumb-ellipsis-dropdown/
A file-explorer header whose breadcrumb collapses to Home › ··· › Documents; the ellipsis opens the hidden ancestors as a dropdown that scales out from the button. The port anchors the menu to the ellipsis itself (not a magic top: 88px), adds the click-outside scrim the original's gotchas asked for, and uses real <nav><ol> breadcrumb semantics. Zero JavaScript.
## HTML
```html
<section class="tmn-13 w-full min-h-svh grid place-items-center bg-tmn13-stage px-4 py-6 font-tmn13-sans antialiased" aria-label="Tailwind collapsible breadcrumb demo">
<div class="group relative flex h-[min(667px,calc(100svh-3rem))] w-full max-w-[375px] flex-col overflow-hidden rounded-[2.25rem] bg-tmn13-bg text-tmn13-ink shadow-[0_40px_100px_-30px_oklch(0_0_0/0.45)]">
<input type="checkbox" id="tmn-13-crumbs" class="peer sr-only" aria-label="Show full path">
<label for="tmn-13-crumbs" aria-hidden="true" class="pointer-events-none absolute inset-0 z-10 group-has-checked:pointer-events-auto"></label>
<header class="relative z-20 flex-none border-b border-tmn13-line bg-white px-4 pt-4 pb-3">
<div class="mb-2.5 flex items-center gap-2">
<a href="#" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Back</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="m15 6-6 6 6 6"/></svg></a>
<h1 class="flex-1 text-[17px] font-semibold">Documents</h1>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">Search</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m20 20-3.5-3.5"/></svg></button>
<button type="button" class="grid size-10 place-items-center rounded-xl border border-tmn13-line"><span class="sr-only">More</span><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><circle cx="5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/></svg></button>
</div>
<nav aria-label="Breadcrumb">
<ol class="flex items-center text-[13px] font-medium text-tmn13-mut">
<li><a href="#" class="rounded-md px-1.5 py-1 text-tmn13-acc hover:bg-tmn13-acc/8">Home</a></li>
<li class="relative flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']">
<label for="tmn-13-crumbs" class="grid h-7 min-w-9 cursor-pointer place-items-center rounded-md border border-tmn13-line bg-tmn13-bg text-xs font-bold tracking-[0.1em] transition-colors hover:border-tmn13-acc hover:bg-tmn13-acc hover:text-white group-has-checked:border-tmn13-acc group-has-checked:bg-tmn13-acc group-has-checked:text-white peer-focus-visible:ring-2 peer-focus-visible:ring-tmn13-acc peer-focus-visible:ring-offset-1"><span aria-hidden="true">···</span><span class="sr-only">Show 4 hidden folders</span></label>
<div class="invisible absolute top-full left-3 z-20 mt-2 min-w-48 origin-top-left -translate-y-2 scale-95 overflow-hidden rounded-xl border border-tmn13-line bg-white py-1 opacity-0 shadow-[0_12px_32px_-8px_oklch(0_0_0/0.18)] transition duration-200 group-has-checked:visible group-has-checked:translate-y-0 group-has-checked:scale-100 group-has-checked:opacity-100">
<a href="#" class="flex min-h-11 items-center gap-2.5 px-3.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg>My Drive</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-6 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Work Projects</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-8.5 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>2026</a>
<a href="#" class="flex min-h-11 items-center gap-2.5 py-0 pr-3.5 pl-11 text-[13px] text-tmn13-ink hover:bg-tmn13-bg"><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg>Q3 Reports</a>
</div>
</li>
<li class="flex items-center before:px-1 before:text-tmn13-line2 before:content-['›']"><span aria-current="page" class="px-1 font-semibold text-tmn13-ink">Documents</span></li>
</ol>
</nav>
</header>
<main class="flex-1 overflow-y-auto">
<p class="flex items-center justify-between px-4 pt-4 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Folders <a href="#" class="text-xs font-semibold tracking-normal text-tmn13-acc normal-case">+ New</a></p>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Design Assets</span><span class="text-xs text-tmn13-mut">48 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Client Reports</span><span class="text-xs text-tmn13-mut">12 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<a href="#" class="flex min-h-14 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><svg viewBox="0 0 24 24" class="size-6 fill-amber-100 text-amber-500" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span class="flex-1 text-sm font-medium">Contracts</span><span class="text-xs text-tmn13-mut">7 items</span><svg viewBox="0 0 24 24" class="size-4 text-tmn13-mut" aria-hidden="true"><path d="m9 6 6 6-6 6"/></svg></a>
<p class="px-4 pt-5 pb-1.5 text-[11px] font-bold tracking-[0.1em] text-tmn13-mut uppercase">Recent files</p>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-red-50 text-[10px] font-bold text-red-700">PDF</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Q3 Summary Report.pdf</span><span class="block text-xs text-tmn13-mut">2.4 MB · Today, 14:32</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 border-b border-black/4 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-green-50 text-[10px] font-bold text-green-700">XLS</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Analytics Dashboard.xlsx</span><span class="block text-xs text-tmn13-mut">840 KB · Yesterday</span></span></a>
<a href="#" class="flex min-h-15 items-center gap-3 px-4 hover:bg-black/2"><span class="grid size-9 place-items-center rounded-lg bg-violet-50 text-[10px] font-bold text-violet-700">FIG</span><span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium">Brand Guidelines.fig</span><span class="block text-xs text-tmn13-mut">18 MB · Sep 3</span></span></a>
</main>
<footer class="flex flex-none items-center gap-3 border-t border-tmn13-acc/15 bg-tmn13-acc/5 px-4 py-3">
<span class="grid size-9 place-items-center rounded-xl bg-tmn13-acc text-white"><svg viewBox="0 0 24 24" class="size-4.5" aria-hidden="true"><path d="M17.5 19a4.5 4.5 0 1 0-1.4-8.8A7 7 0 1 0 4 15.3"/><path d="M8 19h9.5"/></svg></span>
<div class="flex-1"><p class="text-[13px] font-semibold">24.8 GB of 50 GB used</p><div class="mt-1.5 h-1 overflow-hidden rounded-full bg-tmn13-acc/15"><div class="h-full w-1/2 rounded-full bg-tmn13-acc"></div></div></div>
<a href="#" class="grid min-h-9 place-items-center rounded-lg border border-tmn13-acc/30 px-3 text-xs font-semibold text-tmn13-acc">Upgrade</a>
</footer>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tmn13-stage: #e4e4e7;
--color-tmn13-stage: oklch(0.92 0.004 286);
--color-tmn13-bg: #fafafa;
--color-tmn13-bg: oklch(0.985 0 0);
--color-tmn13-line: #e4e4e7;
--color-tmn13-line: oklch(0.92 0.004 286);
--color-tmn13-line2: #b4b4bb;
--color-tmn13-line2: oklch(0.77 0.01 286);
--color-tmn13-ink: #18181b;
--color-tmn13-ink: oklch(0.21 0.006 285);
--color-tmn13-mut: #63636b;
--color-tmn13-mut: oklch(0.5 0.012 286);
--color-tmn13-acc: #2563eb;
--color-tmn13-acc: oklch(0.55 0.22 263);
--font-tmn13-sans: 'Instrument Sans', system-ui, sans-serif;
}
/* Icon base: utilities (fill-*, text-*) still win because this sits in the base layer. */
@layer base {
.tmn-13 svg {
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
flex: none;
}
}
/* Root rule: the full-bleed contract, stated in CSS as well as in utilities, so the stage is
sized before the browser build compiles. */
.tmn-13 {
width: 100%;
min-height: 100svh;
}
```How this works
Anchored, not offset. The original positioned the dropdown at top: 88px on the app bar, which broke whenever the bar's height changed. Here the dropdown lives inside the ellipsis <li class="relative">:
<div class="absolute top-full left-0 mt-2 origin-top-left
invisible scale-95 -translate-y-2 opacity-0
group-has-checked:visible group-has-checked:scale-100 …">Close on outside tap. A transparent full-screen <label for> under the dropdown unchecks the toggle — the fix the CSS version listed as a gotcha.
Separators are before: pseudo-elements on each <li> after the first, so screen readers read only the path.
Make it yours
- Right-aligned:
right-0 origin-top-righton the dropdown. - Show two levels: move one ancestor out of the dropdown into the visible
<ol>. - Text-link ellipsis: drop the border/background on the label.
- Deeper paths: add more links to the dropdown — it grows to fit.
Gotchas — read before shipping
- The breadcrumb row must not be
overflow-hidden, or the anchored dropdown is clipped. - The scrim must sit below the dropdown (
z-10vsz-20) or it swallows the menu clicks. - Hidden ancestors are still in the DOM; keep the dropdown
invisibleso they're not tab stops while closed.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Nothing beyond the Tailwind v4 floor.