39 / 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 Micro-Interaction Animated Hover Breadcrumbs
Three tiny motions stacked on one hover: the crumb lifts 2px, a soft shadow fades in beneath it, and — the detail that sells it — the following separator nudges forward. has-hover: turns the CSS version's relational selector into a variant on the crumb that owns the chevron.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tbc-39 w-full min-h-svh grid place-items-center bg-tbc39-bg font-tbc39-sans px-7 py-9">
<nav aria-label="Breadcrumb">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="flex items-center"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Home</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Products</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Hardware</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" aria-current="page" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-bold text-tbc39-strong no-underline cursor-default focus-visible:outline-2 focus-visible:outline-tbc39-acc focus-visible:outline-offset-2">Keyboards</a></li>
</ol>
</nav>
</section><section class="tbc-39 w-full min-h-svh grid place-items-center bg-tbc39-bg font-tbc39-sans px-7 py-9">
<nav aria-label="Breadcrumb">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="flex items-center"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Home</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Products</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Hardware</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" aria-current="page" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-bold text-tbc39-strong no-underline cursor-default focus-visible:outline-2 focus-visible:outline-tbc39-acc focus-visible:outline-offset-2">Keyboards</a></li>
</ol>
</nav>
</section>@import "tailwindcss";
@theme {
--color-tbc39-bg: #fbfafd;
--color-tbc39-bg: oklch(0.98 0.004 285);
--color-tbc39-ink: #6a6577;
--color-tbc39-ink: oklch(0.45 0.04 285);
--color-tbc39-strong: #3b3745;
--color-tbc39-strong: oklch(0.3 0.02 285);
--color-tbc39-sep: #aaa5b8;
--color-tbc39-sep: oklch(0.7 0.02 285);
--color-tbc39-acc: #6c5ac9;
--color-tbc39-acc: oklch(0.52 0.15 285);
--font-tbc39-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-39 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbc39-bg: #fbfafd;
--color-tbc39-bg: oklch(0.98 0.004 285);
--color-tbc39-ink: #6a6577;
--color-tbc39-ink: oklch(0.45 0.04 285);
--color-tbc39-strong: #3b3745;
--color-tbc39-strong: oklch(0.3 0.02 285);
--color-tbc39-sep: #aaa5b8;
--color-tbc39-sep: oklch(0.7 0.02 285);
--color-tbc39-acc: #6c5ac9;
--color-tbc39-acc: oklch(0.52 0.15 285);
--font-tbc39-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-39 {
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-tbc39-bg: #fbfafd;
--color-tbc39-bg: oklch(0.98 0.004 285);
--color-tbc39-ink: #6a6577;
--color-tbc39-ink: oklch(0.45 0.04 285);
--color-tbc39-strong: #3b3745;
--color-tbc39-strong: oklch(0.3 0.02 285);
--color-tbc39-sep: #aaa5b8;
--color-tbc39-sep: oklch(0.7 0.02 285);
--color-tbc39-acc: #6c5ac9;
--color-tbc39-acc: oklch(0.52 0.15 285);
--font-tbc39-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-39 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbc39-bg: #fbfafd;
--color-tbc39-bg: oklch(0.98 0.004 285);
--color-tbc39-ink: #6a6577;
--color-tbc39-ink: oklch(0.45 0.04 285);
--color-tbc39-strong: #3b3745;
--color-tbc39-strong: oklch(0.3 0.02 285);
--color-tbc39-sep: #aaa5b8;
--color-tbc39-sep: oklch(0.7 0.02 285);
--color-tbc39-acc: #6c5ac9;
--color-tbc39-acc: oklch(0.52 0.15 285);
--font-tbc39-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-39 {
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=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.
li:has(a:hover):not(:last-child)::afterbecomeshas-hover:before:on the following crumb. The relational direction flipped, the selector got simpler, and the nudge now lives on the element that moves.- The spring curve is an arbitrary
ease-[...]rather than a@themeentry, because it is used on two elements in one demo — promote it to--ease-tbc39the moment a third element needs it. - UI change from the CSS original: the original set
outline:noneon hover AND focus and relied on the shadow; this version layers a real 2px accent ring into the focus shadow, so keyboard users get an indicator rather than a lift.
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 Micro-Interaction Animated Hover Breadcrumbs
Source: https://codefronts.com/navigation/tailwind-css-breadcrumbs/tailwind-micro-interaction-animated-hover-breadcrumbs/
Three tiny motions stacked on one hover: the crumb lifts 2px, a soft shadow fades in beneath it, and — the detail that sells it — the following separator nudges forward. has-hover: turns the CSS version's relational selector into a variant on the crumb that owns the chevron.
## HTML
```html
<section class="tbc-39 w-full min-h-svh grid place-items-center bg-tbc39-bg font-tbc39-sans px-7 py-9">
<nav aria-label="Breadcrumb">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="flex items-center"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Home</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Products</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Hardware</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" aria-current="page" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-bold text-tbc39-strong no-underline cursor-default focus-visible:outline-2 focus-visible:outline-tbc39-acc focus-visible:outline-offset-2">Keyboards</a></li>
</ol>
</nav>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbc39-bg: #fbfafd;
--color-tbc39-bg: oklch(0.98 0.004 285);
--color-tbc39-ink: #6a6577;
--color-tbc39-ink: oklch(0.45 0.04 285);
--color-tbc39-strong: #3b3745;
--color-tbc39-strong: oklch(0.3 0.02 285);
--color-tbc39-sep: #aaa5b8;
--color-tbc39-sep: oklch(0.7 0.02 285);
--color-tbc39-acc: #6c5ac9;
--color-tbc39-acc: oklch(0.52 0.15 285);
--font-tbc39-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-39 {
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 Micro-Interaction Animated Hover Breadcrumbs
Source: https://codefronts.com/navigation/tailwind-css-breadcrumbs/tailwind-micro-interaction-animated-hover-breadcrumbs/
Three tiny motions stacked on one hover: the crumb lifts 2px, a soft shadow fades in beneath it, and — the detail that sells it — the following separator nudges forward. has-hover: turns the CSS version's relational selector into a variant on the crumb that owns the chevron.
## HTML
```html
<section class="tbc-39 w-full min-h-svh grid place-items-center bg-tbc39-bg font-tbc39-sans px-7 py-9">
<nav aria-label="Breadcrumb">
<ol class="flex flex-wrap items-center list-none m-0 p-0">
<li class="flex items-center"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Home</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Products</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-semibold text-tbc39-ink no-underline bg-transparent transition-[translate,box-shadow,color,background-color] duration-200 ease-[cubic-bezier(0.34,1.56,0.64,1)] hover:-translate-y-0.5 hover:text-tbc39-acc hover:bg-white hover:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14)] focus-visible:outline-none focus-visible:-translate-y-0.5 focus-visible:text-tbc39-acc focus-visible:bg-white focus-visible:shadow-[0_6px_16px_oklch(0.2_0.06_285/0.14),0_0_0_2px_var(--color-tbc39-acc)] motion-reduce:transition-[color,background-color] motion-reduce:hover:translate-y-0 motion-reduce:focus-visible:translate-y-0">Hardware</a></li>
<li class="flex items-center before:content-['\203A'] before:mx-2 before:text-tbc39-sep before:transition-[translate,color] before:duration-200 before:ease-[cubic-bezier(0.34,1.56,0.64,1)] has-hover:before:translate-x-[3px] has-hover:before:text-tbc39-acc motion-reduce:before:transition-colors motion-reduce:has-hover:before:translate-x-0"><a href="#" aria-current="page" class="inline-flex items-center min-h-9 px-3 rounded-[9px] text-[13.5px] font-bold text-tbc39-strong no-underline cursor-default focus-visible:outline-2 focus-visible:outline-tbc39-acc focus-visible:outline-offset-2">Keyboards</a></li>
</ol>
</nav>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbc39-bg: #fbfafd;
--color-tbc39-bg: oklch(0.98 0.004 285);
--color-tbc39-ink: #6a6577;
--color-tbc39-ink: oklch(0.45 0.04 285);
--color-tbc39-strong: #3b3745;
--color-tbc39-strong: oklch(0.3 0.02 285);
--color-tbc39-sep: #aaa5b8;
--color-tbc39-sep: oklch(0.7 0.02 285);
--color-tbc39-acc: #6c5ac9;
--color-tbc39-acc: oklch(0.52 0.15 285);
--font-tbc39-sans: 'Space Grotesk', system-ui, sans-serif;
}
.tbc-39 {
width: 100%;
min-height: 100svh;
}
```How this works
The neighbour effect becomes a variant. The CSS version wrote li:has(a:hover):not(:last-child)::after — a relational selector pointing forward. Tailwind reads it from the other side: the crumb that owns a before: chevron carries has-hover:before:, so hovering anywhere in that crumb nudges its own separator. Simpler selector, same perceived effect, and it now lives on the element that animates.
Restraint is the technique. 2px, 200ms, one soft shadow. Everything animates transform, opacity or box-shadow, so nothing touches layout at any trail length.
Focus gets the lift too, plus a real ring — focus-visible:shadow-[...,0_0_0_2px_var(--color-tbc39-acc)] layers the indicator into the same shadow that grounds the card.
Make it yours
- Lift:
hover:-translate-y-0.5(2px) is subtle;-translate-y-1is playful. - Spring: the
cubic-bezier— drop the overshoot for a corporate feel. - Nudge:
before:translate-x-[3px]; delete it for a calmer trail.
Gotchas — read before shipping
- Animate only
transform,opacityandbox-shadow.topormarginwould relayout the whole row every frame. - Keep durations at 180–220ms. A 400ms hover lift feels laggy no matter how nice the curve is.
has-hover:matches when any descendant is hovered — fine here, since the crumb holds exactly one link.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
:has() drives the chevron nudge (Firefox 121); without it the lift and shadow still work, which is most of the effect.