02 / 24
All 24 in 24 Tailwind Liquid Glass Navbars
- 01Tailwind iOS 26 Floating Tab Bar
- 02Tailwind macOS Tahoe Menu Bar
- 03Tailwind Safari Toolbar with SVG Refraction
- 04Tailwind visionOS Glass Navbar
- 05Tailwind Liquid Glass Bottom Accessory Bar
- 06Tailwind Dynamic Island Morphing Nav
- 07Tailwind Liquid Glass Navbar (Canonical)
- 08Tailwind Responsive Glass Navbar with Burger
- 09Tailwind Next.js Sticky Glass Header
- 10Tailwind Spring Glide Menu (Framer Motion Port)
- 11Tailwind CSS Variables Glass Theme Generator
- 12Tailwind Glass Override for Bootstrap 5 Navbars
- 13Tailwind Scroll-Opacity Sticky Navbar
- 14Tailwind Inner-Glow Glass Nav Links
- 15Tailwind Cursor-Lens Glass Nav (GSAP-ready)
- 16Tailwind Animated Gradient Blobs Glass Navbar
- 17Tailwind Sliding Capsule Tab Bar (group-has)
- 18Tailwind Reflective Glass Sidebar
- 19Tailwind Fallback-First Glass Navbar
- 20Tailwind High-Contrast Accessible Glass Navbar
- 21Tailwind Light / Dark Liquid Glass Navbar
- 22Tailwind Performance-Tuned Glass Navbar
- 23Tailwind Minimalist Dual-Border Glass Header
- 24Tailwind Responsive Glass Sidebar to Bottom Tabs
Tailwind macOS Tahoe Menu Bar
The razor-thin translucent strip from macOS Tahoe, and the cleanest port in the collection: not one rule survives into a stylesheet. Every property — the 34px height, the blur(30px) saturate(180%) frost, the hairline bottom border, the inset top rim, the margin-inline-start:auto status cluster — has a utility, so the whole menu bar is markup plus a four-line @theme block.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="nbtw-02 relative block w-full min-h-svh overflow-hidden font-nb02-sans bg-[radial-gradient(120%_90%_at_20%_0%,#ff9d6c,#c14bd6_45%,#3b2a86_100%)]" aria-label="macOS Tahoe menu bar demo">
<header class="sticky top-0 z-[5] flex items-center gap-1 h-[34px] px-3 text-white bg-[color-mix(in_oklab,white_14%,transparent)] border-b border-white/[0.28] shadow-[inset_0_1px_0_rgba(255,255,255,.4)] backdrop-blur-[30px] backdrop-saturate-[1.8] [text-shadow:0_1px_3px_rgba(0,0,0,.25)]">
<span class="text-[17px] mr-1" aria-hidden="true">◐</span>
<nav class="flex items-center" aria-label="Menu bar">
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] font-bold text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Lumen</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">File</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Edit</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">View</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Window</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Help</button>
</nav>
<div class="ms-auto flex items-center gap-3.5 text-[13px]">
<span class="opacity-95 cursor-default" title="Wi-Fi" aria-label="Wi-Fi">▲</span>
<span class="opacity-95 cursor-default" title="Battery" aria-label="Battery">▮</span>
<span class="opacity-95 cursor-default" title="Search" aria-label="Search">⌕</span>
<span class="font-semibold tabular-nums">Wed 9:41 AM</span>
</div>
</header>
<div class="h-[calc(100svh-34px)] grid place-items-center">
<span class="text-[clamp(48px,12vw,96px)] font-extrabold tracking-[-0.04em] text-white/[0.14]">Tahoe</span>
</div>
</section><section class="nbtw-02 relative block w-full min-h-svh overflow-hidden font-nb02-sans bg-[radial-gradient(120%_90%_at_20%_0%,#ff9d6c,#c14bd6_45%,#3b2a86_100%)]" aria-label="macOS Tahoe menu bar demo">
<header class="sticky top-0 z-[5] flex items-center gap-1 h-[34px] px-3 text-white bg-[color-mix(in_oklab,white_14%,transparent)] border-b border-white/[0.28] shadow-[inset_0_1px_0_rgba(255,255,255,.4)] backdrop-blur-[30px] backdrop-saturate-[1.8] [text-shadow:0_1px_3px_rgba(0,0,0,.25)]">
<span class="text-[17px] mr-1" aria-hidden="true">◐</span>
<nav class="flex items-center" aria-label="Menu bar">
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] font-bold text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Lumen</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">File</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Edit</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">View</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Window</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Help</button>
</nav>
<div class="ms-auto flex items-center gap-3.5 text-[13px]">
<span class="opacity-95 cursor-default" title="Wi-Fi" aria-label="Wi-Fi">▲</span>
<span class="opacity-95 cursor-default" title="Battery" aria-label="Battery">▮</span>
<span class="opacity-95 cursor-default" title="Search" aria-label="Search">⌕</span>
<span class="font-semibold tabular-nums">Wed 9:41 AM</span>
</div>
</header>
<div class="h-[calc(100svh-34px)] grid place-items-center">
<span class="text-[clamp(48px,12vw,96px)] font-extrabold tracking-[-0.04em] text-white/[0.14]">Tahoe</span>
</div>
</section>@import "tailwindcss";
@theme {
--font-nb02-sans: -apple-system, system-ui, 'Segoe UI', sans-serif;
}@import "tailwindcss";
@theme {
--font-nb02-sans: -apple-system, system-ui, 'Segoe UI', sans-serif;
}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 {
--font-nb02-sans: -apple-system, system-ui, 'Segoe UI', sans-serif;
}@import "tailwindcss";
@theme {
--font-nb02-sans: -apple-system, system-ui, 'Segoe UI', sans-serif;
}What changed in the port
Which parts became utilities, which stayed CSS, and why.
- Zero rules left over. Every declaration in the hand-written version has a utility, so the stylesheet is the Tailwind import plus one font token — the clearest case in the collection for porting a bar rather than keeping it as CSS.
ms-autoreplacesmargin-inline-start:autoexactly, and being the logical property it keeps the status cluster on the trailing edge under RTL with no second rule.hover:andfocus-within:are typed as a pair on every menu title, which makes the keyboard state impossible to forget when you copy a title to add a new menu.- The 34px height is a bracket value rather than a spacing-scale step, because it is a real piece of OS chrome geometry, not a design-scale rhythm.
tabular-numsis a utility, so the clock stops jittering without a font-variant rule.- The wallpaper is a radial-gradient arbitrary background on the root: the frost has to have something coloured underneath or the whole effect is invisible.
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 macOS Tahoe Menu Bar
Source: https://codefronts.com/navigation/tailwind-liquid-glass-navbars/tailwind-macos-tahoe-menu-bar/
The razor-thin translucent strip from macOS Tahoe, and the cleanest port in the collection: not one rule survives into a stylesheet. Every property — the 34px height, the blur(30px) saturate(180%) frost, the hairline bottom border, the inset top rim, the margin-inline-start:auto status cluster — has a utility, so the whole menu bar is markup plus a four-line @theme block.
## HTML
```html
<section class="nbtw-02 relative block w-full min-h-svh overflow-hidden font-nb02-sans bg-[radial-gradient(120%_90%_at_20%_0%,#ff9d6c,#c14bd6_45%,#3b2a86_100%)]" aria-label="macOS Tahoe menu bar demo">
<header class="sticky top-0 z-[5] flex items-center gap-1 h-[34px] px-3 text-white bg-[color-mix(in_oklab,white_14%,transparent)] border-b border-white/[0.28] shadow-[inset_0_1px_0_rgba(255,255,255,.4)] backdrop-blur-[30px] backdrop-saturate-[1.8] [text-shadow:0_1px_3px_rgba(0,0,0,.25)]">
<span class="text-[17px] mr-1" aria-hidden="true">◐</span>
<nav class="flex items-center" aria-label="Menu bar">
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] font-bold text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Lumen</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">File</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Edit</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">View</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Window</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Help</button>
</nav>
<div class="ms-auto flex items-center gap-3.5 text-[13px]">
<span class="opacity-95 cursor-default" title="Wi-Fi" aria-label="Wi-Fi">▲</span>
<span class="opacity-95 cursor-default" title="Battery" aria-label="Battery">▮</span>
<span class="opacity-95 cursor-default" title="Search" aria-label="Search">⌕</span>
<span class="font-semibold tabular-nums">Wed 9:41 AM</span>
</div>
</header>
<div class="h-[calc(100svh-34px)] grid place-items-center">
<span class="text-[clamp(48px,12vw,96px)] font-extrabold tracking-[-0.04em] text-white/[0.14]">Tahoe</span>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--font-nb02-sans: -apple-system, system-ui, 'Segoe UI', sans-serif;
}
```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 macOS Tahoe Menu Bar
Source: https://codefronts.com/navigation/tailwind-liquid-glass-navbars/tailwind-macos-tahoe-menu-bar/
The razor-thin translucent strip from macOS Tahoe, and the cleanest port in the collection: not one rule survives into a stylesheet. Every property — the 34px height, the blur(30px) saturate(180%) frost, the hairline bottom border, the inset top rim, the margin-inline-start:auto status cluster — has a utility, so the whole menu bar is markup plus a four-line @theme block.
## HTML
```html
<section class="nbtw-02 relative block w-full min-h-svh overflow-hidden font-nb02-sans bg-[radial-gradient(120%_90%_at_20%_0%,#ff9d6c,#c14bd6_45%,#3b2a86_100%)]" aria-label="macOS Tahoe menu bar demo">
<header class="sticky top-0 z-[5] flex items-center gap-1 h-[34px] px-3 text-white bg-[color-mix(in_oklab,white_14%,transparent)] border-b border-white/[0.28] shadow-[inset_0_1px_0_rgba(255,255,255,.4)] backdrop-blur-[30px] backdrop-saturate-[1.8] [text-shadow:0_1px_3px_rgba(0,0,0,.25)]">
<span class="text-[17px] mr-1" aria-hidden="true">◐</span>
<nav class="flex items-center" aria-label="Menu bar">
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] font-bold text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Lumen</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">File</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Edit</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">View</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Window</button>
<button class="min-h-[26px] px-[11px] py-[5px] rounded-[7px] text-[13.5px] text-white bg-transparent border-0 cursor-pointer transition-colors duration-150 hover:bg-white/[0.22] focus-within:bg-white/[0.22] focus-visible:outline-2 focus-visible:outline-white focus-visible:outline-offset-1" type="button">Help</button>
</nav>
<div class="ms-auto flex items-center gap-3.5 text-[13px]">
<span class="opacity-95 cursor-default" title="Wi-Fi" aria-label="Wi-Fi">▲</span>
<span class="opacity-95 cursor-default" title="Battery" aria-label="Battery">▮</span>
<span class="opacity-95 cursor-default" title="Search" aria-label="Search">⌕</span>
<span class="font-semibold tabular-nums">Wed 9:41 AM</span>
</div>
</header>
<div class="h-[calc(100svh-34px)] grid place-items-center">
<span class="text-[clamp(48px,12vw,96px)] font-extrabold tracking-[-0.04em] text-white/[0.14]">Tahoe</span>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--font-nb02-sans: -apple-system, system-ui, 'Segoe UI', sans-serif;
}
```How this works
This is the demo that proves the port is not a compromise. The hand-written version is 13 CSS rules. Here the stylesheet is @import "tailwindcss" plus a font token, and everything else is in the class lists:
class="sticky top-0 z-5 flex items-center gap-1 h-[34px] px-3
text-white bg-[color-mix(in_oklab,white_14%,transparent)]
border-b border-white/[0.28]
shadow-[inset_0_1px_0_rgba(255,255,255,.4)]
backdrop-blur-[30px] backdrop-saturate-[1.8]"The frost only exists over something. The desktop behind is a radial wallpaper gradient, and the bar is sticky rather than fixed so it reserves its 34px in flow — the same zero-CLS discipline the CSS version keeps.
Menu titles are buttons, not divs. Each is a real <button> with hover: and focus-within: frost and a focus-visible: ring, which is what makes a decorative-looking strip actually operable. The app title is the same class list plus font-bold.
The status cluster needs no positioning. ms-auto pushes it to the trailing edge as a flex spacer, and it stays correct in RTL because the utility is the logical property, not margin-left.
Make it yours
- Flip to a dark menu bar by swapping the fill to
bg-[color-mix(in_oklab,black_24%,transparent)]and dropping the text-shadow. - Dial the wallpaper blend with
backdrop-blur-[20px]through[40px]— higher reads as thicker glass, lower lets more wallpaper detail through. - Promote the fill and rim to
@themecolours if you need the same glass on several bars; that is what makesbg-nb02-glasspossible. - Wire the titles to real menus with the
popoverattribute; the capsule styling needs no change. - Raise the strip to 38px (
h-[38px]) for touch-adjacent contexts — the type scale and rim survive it unchanged.
Gotchas — read before shipping
- The strip only blends over an image or gradient. Over a flat colour
backdrop-bluris invisible and the bar just looks like a tinted div. border-white/[0.28]needs the bracket form for the two-decimal alpha;border-white/28is a different value (28%, which reads heavier here).- Keep
focus-visible:rings on the titles. A menu bar is the easiest place to lose keyboard users, because nothing about it looks focusable at rest. gap-1plus per-title padding is what keeps the row a single line at every width — do not add margins to the titles, or the flex spacer maths drifts.- 13.5px type over a bright wallpaper needs the text-shadow. Drop it only if you also raise the fill opacity.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
Tailwind v4 sets the floor. The bar itself degrades gracefully: without backdrop-filter support it renders as a lightly tinted solid strip that still reads as menu-bar chrome.