19 / 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 SaaS Gradient-Text Breadcrumb Bar with Animated Clip
The marketing-site trail: crumb labels painted with a slowly drifting conic gradient clipped to the text, on a frosted white bar. Hover speeds the drift and draws a gradient rule under the label. bg-clip-text text-transparent is a real Tailwind pair, so only the angle registration and keyframes stay CSS.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tbc-19 w-full min-h-svh flex items-center justify-center px-6 py-10 font-tbc19-sans text-tbc19-ink bg-[radial-gradient(1200px_600px_at_50%_-10%,oklch(0.96_0.02_270/0.9),transparent_60%),linear-gradient(180deg,oklch(0.99_0.005_260),oklch(0.97_0.01_265))]">
<nav aria-label="Breadcrumb" class="w-full max-w-[880px] px-5.5 py-3.5 rounded-2xl bg-white/72 backdrop-blur-[14px] border border-tbc19-edge shadow-[inset_0_1px_0_oklch(1_0_0/0.9),0_12px_40px_-18px_oklch(0.3_0.05_270/0.35)]">
<ol class="flex flex-wrap items-center gap-x-1 gap-y-0.5 list-none m-0 p-0 text-[15px] font-medium tracking-[-0.005em]">
<li class="inline-flex items-center min-h-11"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Docs</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Guides</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Authentication</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" aria-current="page" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline font-bold bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.72_0.22_20),oklch(0.66_0.24_275),oklch(0.6_0.24_300))] animate-tbc19-drift [animation-duration:7s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.66_0.24_275)]">Magic Links</a></li>
</ol>
</nav>
</section><section class="tbc-19 w-full min-h-svh flex items-center justify-center px-6 py-10 font-tbc19-sans text-tbc19-ink bg-[radial-gradient(1200px_600px_at_50%_-10%,oklch(0.96_0.02_270/0.9),transparent_60%),linear-gradient(180deg,oklch(0.99_0.005_260),oklch(0.97_0.01_265))]">
<nav aria-label="Breadcrumb" class="w-full max-w-[880px] px-5.5 py-3.5 rounded-2xl bg-white/72 backdrop-blur-[14px] border border-tbc19-edge shadow-[inset_0_1px_0_oklch(1_0_0/0.9),0_12px_40px_-18px_oklch(0.3_0.05_270/0.35)]">
<ol class="flex flex-wrap items-center gap-x-1 gap-y-0.5 list-none m-0 p-0 text-[15px] font-medium tracking-[-0.005em]">
<li class="inline-flex items-center min-h-11"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Docs</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Guides</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Authentication</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" aria-current="page" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline font-bold bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.72_0.22_20),oklch(0.66_0.24_275),oklch(0.6_0.24_300))] animate-tbc19-drift [animation-duration:7s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.66_0.24_275)]">Magic Links</a></li>
</ol>
</nav>
</section>@import "tailwindcss";
@property --tbc19-angle {
syntax: '<angle>';
initial-value: 0deg;
inherits: false;
}
@theme {
--color-tbc19-ink: #3b3f4d;
--color-tbc19-ink: oklch(0.28 0.02 260);
--color-tbc19-edge: #e2e4ee;
--color-tbc19-edge: oklch(0.9 0.01 260 / 0.7);
--color-tbc19-sep: #b3b6c2;
--color-tbc19-sep: oklch(0.75 0.02 260);
--color-tbc19-focus: #7a5cf0;
--color-tbc19-focus: oklch(0.62 0.2 285);
--font-tbc19-sans: 'Space Grotesk', ui-sans-serif, system-ui, sans-serif;
--animate-tbc19-drift: tbc19-drift 18s linear infinite;
}
@keyframes tbc19-drift {
to {
--tbc19-angle: 360deg;
}
}
.tbc-19 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@property --tbc19-angle {
syntax: '<angle>';
initial-value: 0deg;
inherits: false;
}
@theme {
--color-tbc19-ink: #3b3f4d;
--color-tbc19-ink: oklch(0.28 0.02 260);
--color-tbc19-edge: #e2e4ee;
--color-tbc19-edge: oklch(0.9 0.01 260 / 0.7);
--color-tbc19-sep: #b3b6c2;
--color-tbc19-sep: oklch(0.75 0.02 260);
--color-tbc19-focus: #7a5cf0;
--color-tbc19-focus: oklch(0.62 0.2 285);
--font-tbc19-sans: 'Space Grotesk', ui-sans-serif, system-ui, sans-serif;
--animate-tbc19-drift: tbc19-drift 18s linear infinite;
}
@keyframes tbc19-drift {
to {
--tbc19-angle: 360deg;
}
}
.tbc-19 {
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";
@property --tbc19-angle {
syntax: '<angle>';
initial-value: 0deg;
inherits: false;
}
@theme {
--color-tbc19-ink: #3b3f4d;
--color-tbc19-ink: oklch(0.28 0.02 260);
--color-tbc19-edge: #e2e4ee;
--color-tbc19-edge: oklch(0.9 0.01 260 / 0.7);
--color-tbc19-sep: #b3b6c2;
--color-tbc19-sep: oklch(0.75 0.02 260);
--color-tbc19-focus: #7a5cf0;
--color-tbc19-focus: oklch(0.62 0.2 285);
--font-tbc19-sans: 'Space Grotesk', ui-sans-serif, system-ui, sans-serif;
--animate-tbc19-drift: tbc19-drift 18s linear infinite;
}
@keyframes tbc19-drift {
to {
--tbc19-angle: 360deg;
}
}
.tbc-19 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@property --tbc19-angle {
syntax: '<angle>';
initial-value: 0deg;
inherits: false;
}
@theme {
--color-tbc19-ink: #3b3f4d;
--color-tbc19-ink: oklch(0.28 0.02 260);
--color-tbc19-edge: #e2e4ee;
--color-tbc19-edge: oklch(0.9 0.01 260 / 0.7);
--color-tbc19-sep: #b3b6c2;
--color-tbc19-sep: oklch(0.75 0.02 260);
--color-tbc19-focus: #7a5cf0;
--color-tbc19-focus: oklch(0.62 0.2 285);
--font-tbc19-sans: 'Space Grotesk', ui-sans-serif, system-ui, sans-serif;
--animate-tbc19-drift: tbc19-drift 18s linear infinite;
}
@keyframes tbc19-drift {
to {
--tbc19-angle: 360deg;
}
}
.tbc-19 {
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.
hover:[animation-duration:6s]is the neat part of this port: the CSS version re-declared the animation on hover, and the utility form changes one longhand while the animation keeps running — no restart, no jump.- The
@supports not (background: paint(something))fallback from the original is replaced bymotion-reduce:plus the registered-property default. Feature-detecting@propertyvia a paint worklet was always a proxy, and a static gradient is the same outcome. - UI change from the CSS original: the gradient stops were pulled into a single lightness band so the labels never wash out mid-rotation against the white bar — the original's brightest stops dropped below 4.5:1 at certain angles.
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 SaaS Gradient-Text Breadcrumb Bar with Animated Clip
Source: https://codefronts.com/navigation/tailwind-css-breadcrumbs/tailwind-saas-gradient-text-breadcrumb-animated-clip/
The marketing-site trail: crumb labels painted with a slowly drifting conic gradient clipped to the text, on a frosted white bar. Hover speeds the drift and draws a gradient rule under the label. bg-clip-text text-transparent is a real Tailwind pair, so only the angle registration and keyframes stay CSS.
## HTML
```html
<section class="tbc-19 w-full min-h-svh flex items-center justify-center px-6 py-10 font-tbc19-sans text-tbc19-ink bg-[radial-gradient(1200px_600px_at_50%_-10%,oklch(0.96_0.02_270/0.9),transparent_60%),linear-gradient(180deg,oklch(0.99_0.005_260),oklch(0.97_0.01_265))]">
<nav aria-label="Breadcrumb" class="w-full max-w-[880px] px-5.5 py-3.5 rounded-2xl bg-white/72 backdrop-blur-[14px] border border-tbc19-edge shadow-[inset_0_1px_0_oklch(1_0_0/0.9),0_12px_40px_-18px_oklch(0.3_0.05_270/0.35)]">
<ol class="flex flex-wrap items-center gap-x-1 gap-y-0.5 list-none m-0 p-0 text-[15px] font-medium tracking-[-0.005em]">
<li class="inline-flex items-center min-h-11"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Docs</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Guides</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Authentication</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" aria-current="page" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline font-bold bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.72_0.22_20),oklch(0.66_0.24_275),oklch(0.6_0.24_300))] animate-tbc19-drift [animation-duration:7s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.66_0.24_275)]">Magic Links</a></li>
</ol>
</nav>
</section>
```
## CSS
```css
@import "tailwindcss";
@property --tbc19-angle {
syntax: '<angle>';
initial-value: 0deg;
inherits: false;
}
@theme {
--color-tbc19-ink: #3b3f4d;
--color-tbc19-ink: oklch(0.28 0.02 260);
--color-tbc19-edge: #e2e4ee;
--color-tbc19-edge: oklch(0.9 0.01 260 / 0.7);
--color-tbc19-sep: #b3b6c2;
--color-tbc19-sep: oklch(0.75 0.02 260);
--color-tbc19-focus: #7a5cf0;
--color-tbc19-focus: oklch(0.62 0.2 285);
--font-tbc19-sans: 'Space Grotesk', ui-sans-serif, system-ui, sans-serif;
--animate-tbc19-drift: tbc19-drift 18s linear infinite;
}
@keyframes tbc19-drift {
to {
--tbc19-angle: 360deg;
}
}
.tbc-19 {
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 SaaS Gradient-Text Breadcrumb Bar with Animated Clip
Source: https://codefronts.com/navigation/tailwind-css-breadcrumbs/tailwind-saas-gradient-text-breadcrumb-animated-clip/
The marketing-site trail: crumb labels painted with a slowly drifting conic gradient clipped to the text, on a frosted white bar. Hover speeds the drift and draws a gradient rule under the label. bg-clip-text text-transparent is a real Tailwind pair, so only the angle registration and keyframes stay CSS.
## HTML
```html
<section class="tbc-19 w-full min-h-svh flex items-center justify-center px-6 py-10 font-tbc19-sans text-tbc19-ink bg-[radial-gradient(1200px_600px_at_50%_-10%,oklch(0.96_0.02_270/0.9),transparent_60%),linear-gradient(180deg,oklch(0.99_0.005_260),oklch(0.97_0.01_265))]">
<nav aria-label="Breadcrumb" class="w-full max-w-[880px] px-5.5 py-3.5 rounded-2xl bg-white/72 backdrop-blur-[14px] border border-tbc19-edge shadow-[inset_0_1px_0_oklch(1_0_0/0.9),0_12px_40px_-18px_oklch(0.3_0.05_270/0.35)]">
<ol class="flex flex-wrap items-center gap-x-1 gap-y-0.5 list-none m-0 p-0 text-[15px] font-medium tracking-[-0.005em]">
<li class="inline-flex items-center min-h-11"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Docs</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Guides</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] animate-tbc19-drift transition-[filter] duration-250 hover:[animation-duration:6s] hover:[filter:saturate(1.15)] focus-visible:[animation-duration:6s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 after:content-[''] after:absolute after:inset-x-2 after:bottom-1 after:h-[1.5px] after:rounded-[2px] after:opacity-0 after:scale-x-40 after:origin-left after:transition-[opacity,scale] after:duration-300 after:bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.72_0.2_25),oklch(0.7_0.2_190),oklch(0.62_0.2_285))] hover:after:opacity-85 hover:after:scale-x-100 focus-visible:after:opacity-85 focus-visible:after:scale-x-100 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.62_0.2_285),oklch(0.68_0.22_320),oklch(0.66_0.24_20)]">Authentication</a></li>
<li class="inline-flex items-center min-h-11 before:content-[''] before:inline-block before:w-1.5 before:h-1.5 before:mx-2.5 before:rotate-[-45deg] before:opacity-70 before:border-r-[1.5px] before:border-b-[1.5px] before:border-tbc19-sep"><a href="#" aria-current="page" class="relative inline-flex items-center min-h-11 px-2 rounded-lg no-underline font-bold bg-clip-text text-transparent bg-[conic-gradient(from_var(--tbc19-angle),oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.72_0.22_20),oklch(0.66_0.24_275),oklch(0.6_0.24_300))] animate-tbc19-drift [animation-duration:7s] focus-visible:outline-2 focus-visible:outline-tbc19-focus focus-visible:outline-offset-3 motion-reduce:animate-none motion-reduce:bg-linear-[90deg,oklch(0.6_0.24_300),oklch(0.68_0.24_340),oklch(0.66_0.24_275)]">Magic Links</a></li>
</ol>
</nav>
</section>
```
## CSS
```css
@import "tailwindcss";
@property --tbc19-angle {
syntax: '<angle>';
initial-value: 0deg;
inherits: false;
}
@theme {
--color-tbc19-ink: #3b3f4d;
--color-tbc19-ink: oklch(0.28 0.02 260);
--color-tbc19-edge: #e2e4ee;
--color-tbc19-edge: oklch(0.9 0.01 260 / 0.7);
--color-tbc19-sep: #b3b6c2;
--color-tbc19-sep: oklch(0.75 0.02 260);
--color-tbc19-focus: #7a5cf0;
--color-tbc19-focus: oklch(0.62 0.2 285);
--font-tbc19-sans: 'Space Grotesk', ui-sans-serif, system-ui, sans-serif;
--animate-tbc19-drift: tbc19-drift 18s linear infinite;
}
@keyframes tbc19-drift {
to {
--tbc19-angle: 360deg;
}
}
.tbc-19 {
width: 100%;
min-height: 100svh;
}
```How this works
Clipped gradients need transparent ink. bg-clip-text paints the background through the glyphs and text-transparent gets the fill colour out of the way. Tailwind ships both, so the only arbitrary part is the gradient value itself.
The angle is a registered property. @property --tbc19-angle makes it interpolable; the keyframe walks it to 360deg. Because @theme exposes the animation, the markup can still decide the tempo: resting 18s, hover 6s, current crumb 7s — all via [animation-duration:...].
Contrast caveat, handled. Gradient text cannot be contrast-audited as one colour, so every stop sits at or below oklch(0.72) lightness on the near-white bar, and the reduced-motion fallback uses the darkest three stops.
Make it yours
- Palette: the five conic stops. Keep them within one lightness band or the label flickers between legible and not as it rotates.
- Tempo: the three
[animation-duration:...]values. - Bar:
bg-white/72 backdrop-blur-[14px]— drop both for gradient text on a plain page.
Gotchas — read before shipping
text-transparentwithoutbg-clip-textproduces invisible text. They are one unit; never split them across variants.- Selected gradient text copies as plain text but renders with no selection highlight in some engines — acceptable on a nav, not on body copy.
- Windows High Contrast Mode drops the background and leaves transparent glyphs; add a
forced-colors:text-[CanvasText]utility if you ship this on a real docs site.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
background-clip:text is Baseline; @property (Firefox 128) gates the rotation only, and the static gradient remains without it.