Modern Glassmorphism Floating Sidebar Design in CSS
A smart-home control dashboard with a glassmorphic side nav and a true backdrop-blur effect. The rail floats with rounded corners over an animated ambient gradient, using backdrop-filter blur + saturation, inset highlights, and frosted hover tooltips. Matching glass stat cards (temperature, lights, energy). Vibrant, depth-driven, fully transparent layering — one of the cool modern CSS sidebar designs that proves how much identity a single rail can carry. Best for smart-home apps, modern dashboards, premium SaaS landing pages — anywhere the sidebar IS the brand visual.
Published
The code
<section class="sn-gls" aria-label="Glassmorphism floating sidebar demo">
<div class="layout">
<nav class="sidebar" aria-label="Smart-home navigation">
<div class="logo" aria-hidden="true">❋</div>
<a class="nav-icon active" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/></svg><span class="tip">Home</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/></svg><span class="tip">Lighting</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg><span class="tip">Climate</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16"/></svg><span class="tip">Security</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><path d="M9 9h12"/></svg><span class="tip">Media</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 12h18M3 6h18M3 18h18"/></svg><span class="tip">Scenes</span></a>
<div class="spacer"></div>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 01-2.83 2.83l-.06-.06a1.65 1.65 0 00-2.82 1.17V21a2 2 0 01-4 0v-.09A1.65 1.65 0 007 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 11-2.83-2.83l.06-.06A1.65 1.65 0 004.6 14H4.5a2 2 0 010-4h.09A1.65 1.65 0 006 8.6"/></svg><span class="tip">Settings</span></a>
<div class="avatar" aria-hidden="true"></div>
</nav>
<main class="contentpane">
<div class="hello">
<h1>Good evening, Ada</h1>
<p>A frosted glass rail floats above an ambient gradient — pure CSS backdrop-filter.</p>
</div>
<div class="cards">
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg></div>
<b>Living Room</b><div class="v">21.5°</div><small>Heating · auto</small>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2"/></svg></div>
<b>Lights</b><small>4 of 6 on</small><div class="toggleui" aria-hidden="true"></div>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M13 2L3 14h9l-1 8 10-12h-9z"/></svg></div>
<b>Energy Today</b><div class="v">8.2 kWh</div><small>−12% vs avg</small>
</div>
</div>
</main>
</div>
</section><section class="sn-gls" aria-label="Glassmorphism floating sidebar demo">
<div class="layout">
<nav class="sidebar" aria-label="Smart-home navigation">
<div class="logo" aria-hidden="true">❋</div>
<a class="nav-icon active" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/></svg><span class="tip">Home</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/></svg><span class="tip">Lighting</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg><span class="tip">Climate</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16"/></svg><span class="tip">Security</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><path d="M9 9h12"/></svg><span class="tip">Media</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 12h18M3 6h18M3 18h18"/></svg><span class="tip">Scenes</span></a>
<div class="spacer"></div>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 01-2.83 2.83l-.06-.06a1.65 1.65 0 00-2.82 1.17V21a2 2 0 01-4 0v-.09A1.65 1.65 0 007 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 11-2.83-2.83l.06-.06A1.65 1.65 0 004.6 14H4.5a2 2 0 010-4h.09A1.65 1.65 0 006 8.6"/></svg><span class="tip">Settings</span></a>
<div class="avatar" aria-hidden="true"></div>
</nav>
<main class="contentpane">
<div class="hello">
<h1>Good evening, Ada</h1>
<p>A frosted glass rail floats above an ambient gradient — pure CSS backdrop-filter.</p>
</div>
<div class="cards">
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg></div>
<b>Living Room</b><div class="v">21.5°</div><small>Heating · auto</small>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2"/></svg></div>
<b>Lights</b><small>4 of 6 on</small><div class="toggleui" aria-hidden="true"></div>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M13 2L3 14h9l-1 8 10-12h-9z"/></svg></div>
<b>Energy Today</b><div class="v">8.2 kWh</div><small>−12% vs avg</small>
</div>
</div>
</main>
</div>
</section>/* ─── 08 Glassmorphism Floating Sidebar — smart home ──────── */
@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&display=swap');
.sn-gls {
--sn-gls-txt: #f4f6ff;
--sn-gls-muted: rgba(244,246,255,.6);
--sn-gls-glass: rgba(255,255,255,.1);
--sn-gls-glass-brd: rgba(255,255,255,.22);
--sn-gls-active: rgba(255,255,255,.9);
position: relative;
width: 100%;
height: 600px;
font-family: 'Sora', sans-serif;
color: var(--sn-gls-txt);
background: radial-gradient(700px 700px at 8% 12%, #7c5cff 0%, transparent 55%), radial-gradient(900px 700px at 95% 20%, #ff5ca8 0%, transparent 50%), radial-gradient(800px 800px at 70% 100%, #2bd9c9 0%, transparent 55%), #14102b;
overflow: hidden;
box-sizing: border-box;
}
.sn-gls *,
.sn-gls *::before,
.sn-gls *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sn-gls::before {
content: "";
position: absolute;
width: 480px;
height: 480px;
border-radius: 50%;
background: radial-gradient(circle, #ffb347, transparent 65%);
top: 30%;
left: 40%;
filter: blur(40px);
opacity: .4;
animation: sn-gls-float 14s ease-in-out infinite;
pointer-events: none;
}
@keyframes sn-gls-float {
0%,
100% {
transform: translate(0, 0);
}
50% {
transform: translate(60px, -50px);
}
}
.sn-gls .layout {
display: flex;
height: 100%;
padding: 22px;
position: relative;
z-index: 1;
}
.sn-gls .sidebar {
width: 96px;
background: var(--sn-gls-glass);
backdrop-filter: blur(22px) saturate(160%);
-webkit-backdrop-filter: blur(22px) saturate(160%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 28px;
box-shadow: 0 18px 50px rgba(0,0,0,.28), inset 0 1px 0 rgba(255,255,255,.3);
display: flex;
flex-direction: column;
align-items: center;
padding: 1.4rem 0;
gap: .6rem;
flex-shrink: 0;
}
.sn-gls .logo {
width: 48px;
height: 48px;
border-radius: 16px;
background: linear-gradient(135deg, #fff, rgba(255,255,255,.6));
display: grid;
place-items: center;
color: #14102b;
font-weight: 800;
font-size: 1.4rem;
margin-bottom: 1rem;
box-shadow: 0 8px 24px rgba(0,0,0,.2);
flex-shrink: 0;
}
.sn-gls .nav-icon {
width: 52px;
height: 52px;
border-radius: 16px;
display: grid;
place-items: center;
color: var(--sn-gls-txt);
text-decoration: none;
position: relative;
transition: .25s;
flex-shrink: 0;
}
.sn-gls .nav-icon svg {
width: 23px;
height: 23px;
stroke-width: 1.8;
}
.sn-gls .nav-icon:hover {
background: rgba(255,255,255,.14);
}
.sn-gls .nav-icon.active {
background: var(--sn-gls-active);
color: #14102b;
box-shadow: 0 8px 22px rgba(0,0,0,.22);
}
.sn-gls .nav-icon .tip {
position: absolute;
left: 64px;
top: 50%;
transform: translateY(-50%) scale(.85);
background: rgba(20,16,43,.85);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
color: #fff;
font-size: .76rem;
padding: .35rem .7rem;
border-radius: 9px;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: .2s;
border: 1px solid var(--sn-gls-glass-brd);
z-index: 5;
}
.sn-gls .nav-icon:hover .tip {
opacity: 1;
transform: translateY(-50%) scale(1);
}
.sn-gls .spacer {
flex: 1;
}
.sn-gls .avatar {
width: 46px;
height: 46px;
border-radius: 50%;
border: 2px solid var(--sn-gls-glass-brd);
background: linear-gradient(135deg, #ff5ca8, #7c5cff);
flex-shrink: 0;
}
.sn-gls .contentpane {
flex: 1;
padding: 1.4rem 2rem;
min-width: 0;
overflow-y: auto;
}
.sn-gls .hello h1 {
font-size: 2.4rem;
font-weight: 800;
letter-spacing: -.03em;
}
.sn-gls .hello p {
color: var(--sn-gls-muted);
margin-top: .3rem;
}
.sn-gls .cards {
margin-top: 2rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
gap: 1.1rem;
max-width: 720px;
}
.sn-gls .gcard {
background: var(--sn-gls-glass);
backdrop-filter: blur(20px) saturate(150%);
-webkit-backdrop-filter: blur(20px) saturate(150%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 22px;
padding: 1.4rem;
box-shadow: 0 12px 36px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.25);
}
.sn-gls .gcard .ic {
width: 42px;
height: 42px;
border-radius: 13px;
background: rgba(255,255,255,.16);
display: grid;
place-items: center;
margin-bottom: 1rem;
}
.sn-gls .gcard .ic svg {
width: 21px;
height: 21px;
stroke: #fff;
}
.sn-gls .gcard b {
font-size: 1.05rem;
font-weight: 600;
}
.sn-gls .gcard .v {
font-size: 1.9rem;
font-weight: 800;
margin-top: .5rem;
letter-spacing: -.02em;
}
.sn-gls .gcard small {
color: var(--sn-gls-muted);
font-size: .8rem;
}
.sn-gls .toggleui {
margin-top: .9rem;
width: 46px;
height: 26px;
border-radius: 20px;
background: rgba(255,255,255,.9);
position: relative;
}
.sn-gls .toggleui::after {
content: "";
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background: #14102b;
top: 3px;
right: 3px;
}
@media (prefers-reduced-motion: reduce) {
.sn-gls::before {
animation: none;
}
.sn-gls .nav-icon,
.sn-gls .nav-icon .tip {
transition: none;
}
}/* ─── 08 Glassmorphism Floating Sidebar — smart home ──────── */
@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&display=swap');
.sn-gls {
--sn-gls-txt: #f4f6ff;
--sn-gls-muted: rgba(244,246,255,.6);
--sn-gls-glass: rgba(255,255,255,.1);
--sn-gls-glass-brd: rgba(255,255,255,.22);
--sn-gls-active: rgba(255,255,255,.9);
position: relative;
width: 100%;
height: 600px;
font-family: 'Sora', sans-serif;
color: var(--sn-gls-txt);
background: radial-gradient(700px 700px at 8% 12%, #7c5cff 0%, transparent 55%), radial-gradient(900px 700px at 95% 20%, #ff5ca8 0%, transparent 50%), radial-gradient(800px 800px at 70% 100%, #2bd9c9 0%, transparent 55%), #14102b;
overflow: hidden;
box-sizing: border-box;
}
.sn-gls *,
.sn-gls *::before,
.sn-gls *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sn-gls::before {
content: "";
position: absolute;
width: 480px;
height: 480px;
border-radius: 50%;
background: radial-gradient(circle, #ffb347, transparent 65%);
top: 30%;
left: 40%;
filter: blur(40px);
opacity: .4;
animation: sn-gls-float 14s ease-in-out infinite;
pointer-events: none;
}
@keyframes sn-gls-float {
0%,
100% {
transform: translate(0, 0);
}
50% {
transform: translate(60px, -50px);
}
}
.sn-gls .layout {
display: flex;
height: 100%;
padding: 22px;
position: relative;
z-index: 1;
}
.sn-gls .sidebar {
width: 96px;
background: var(--sn-gls-glass);
backdrop-filter: blur(22px) saturate(160%);
-webkit-backdrop-filter: blur(22px) saturate(160%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 28px;
box-shadow: 0 18px 50px rgba(0,0,0,.28), inset 0 1px 0 rgba(255,255,255,.3);
display: flex;
flex-direction: column;
align-items: center;
padding: 1.4rem 0;
gap: .6rem;
flex-shrink: 0;
}
.sn-gls .logo {
width: 48px;
height: 48px;
border-radius: 16px;
background: linear-gradient(135deg, #fff, rgba(255,255,255,.6));
display: grid;
place-items: center;
color: #14102b;
font-weight: 800;
font-size: 1.4rem;
margin-bottom: 1rem;
box-shadow: 0 8px 24px rgba(0,0,0,.2);
flex-shrink: 0;
}
.sn-gls .nav-icon {
width: 52px;
height: 52px;
border-radius: 16px;
display: grid;
place-items: center;
color: var(--sn-gls-txt);
text-decoration: none;
position: relative;
transition: .25s;
flex-shrink: 0;
}
.sn-gls .nav-icon svg {
width: 23px;
height: 23px;
stroke-width: 1.8;
}
.sn-gls .nav-icon:hover {
background: rgba(255,255,255,.14);
}
.sn-gls .nav-icon.active {
background: var(--sn-gls-active);
color: #14102b;
box-shadow: 0 8px 22px rgba(0,0,0,.22);
}
.sn-gls .nav-icon .tip {
position: absolute;
left: 64px;
top: 50%;
transform: translateY(-50%) scale(.85);
background: rgba(20,16,43,.85);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
color: #fff;
font-size: .76rem;
padding: .35rem .7rem;
border-radius: 9px;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: .2s;
border: 1px solid var(--sn-gls-glass-brd);
z-index: 5;
}
.sn-gls .nav-icon:hover .tip {
opacity: 1;
transform: translateY(-50%) scale(1);
}
.sn-gls .spacer {
flex: 1;
}
.sn-gls .avatar {
width: 46px;
height: 46px;
border-radius: 50%;
border: 2px solid var(--sn-gls-glass-brd);
background: linear-gradient(135deg, #ff5ca8, #7c5cff);
flex-shrink: 0;
}
.sn-gls .contentpane {
flex: 1;
padding: 1.4rem 2rem;
min-width: 0;
overflow-y: auto;
}
.sn-gls .hello h1 {
font-size: 2.4rem;
font-weight: 800;
letter-spacing: -.03em;
}
.sn-gls .hello p {
color: var(--sn-gls-muted);
margin-top: .3rem;
}
.sn-gls .cards {
margin-top: 2rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
gap: 1.1rem;
max-width: 720px;
}
.sn-gls .gcard {
background: var(--sn-gls-glass);
backdrop-filter: blur(20px) saturate(150%);
-webkit-backdrop-filter: blur(20px) saturate(150%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 22px;
padding: 1.4rem;
box-shadow: 0 12px 36px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.25);
}
.sn-gls .gcard .ic {
width: 42px;
height: 42px;
border-radius: 13px;
background: rgba(255,255,255,.16);
display: grid;
place-items: center;
margin-bottom: 1rem;
}
.sn-gls .gcard .ic svg {
width: 21px;
height: 21px;
stroke: #fff;
}
.sn-gls .gcard b {
font-size: 1.05rem;
font-weight: 600;
}
.sn-gls .gcard .v {
font-size: 1.9rem;
font-weight: 800;
margin-top: .5rem;
letter-spacing: -.02em;
}
.sn-gls .gcard small {
color: var(--sn-gls-muted);
font-size: .8rem;
}
.sn-gls .toggleui {
margin-top: .9rem;
width: 46px;
height: 26px;
border-radius: 20px;
background: rgba(255,255,255,.9);
position: relative;
}
.sn-gls .toggleui::after {
content: "";
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background: #14102b;
top: 3px;
right: 3px;
}
@media (prefers-reduced-motion: reduce) {
.sn-gls::before {
animation: none;
}
.sn-gls .nav-icon,
.sn-gls .nav-icon .tip {
transition: none;
}
}Here's a working CSS Sidebar Navigation Design 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: Modern Glassmorphism Floating Sidebar Design in CSS
Source: https://codefronts.com/navigation/css-sidebar-navigation/modern-glassmorphism-floating-sidebar-design-in-css/
A smart-home control dashboard with a glassmorphic side nav and a true backdrop-blur effect. The rail floats with rounded corners over an animated ambient gradient, using backdrop-filter blur + saturation, inset highlights, and frosted hover tooltips. Matching glass stat cards (temperature, lights, energy). Vibrant, depth-driven, fully transparent layering — one of the cool modern CSS sidebar designs that proves how much identity a single rail can carry. Best for smart-home apps, modern dashboards, premium SaaS landing pages — anywhere the sidebar IS the brand visual.
## HTML
```html
<section class="sn-gls" aria-label="Glassmorphism floating sidebar demo">
<div class="layout">
<nav class="sidebar" aria-label="Smart-home navigation">
<div class="logo" aria-hidden="true">❋</div>
<a class="nav-icon active" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/></svg><span class="tip">Home</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/></svg><span class="tip">Lighting</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg><span class="tip">Climate</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16"/></svg><span class="tip">Security</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><path d="M9 9h12"/></svg><span class="tip">Media</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 12h18M3 6h18M3 18h18"/></svg><span class="tip">Scenes</span></a>
<div class="spacer"></div>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 01-2.83 2.83l-.06-.06a1.65 1.65 0 00-2.82 1.17V21a2 2 0 01-4 0v-.09A1.65 1.65 0 007 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 11-2.83-2.83l.06-.06A1.65 1.65 0 004.6 14H4.5a2 2 0 010-4h.09A1.65 1.65 0 006 8.6"/></svg><span class="tip">Settings</span></a>
<div class="avatar" aria-hidden="true"></div>
</nav>
<main class="contentpane">
<div class="hello">
<h1>Good evening, Ada</h1>
<p>A frosted glass rail floats above an ambient gradient — pure CSS backdrop-filter.</p>
</div>
<div class="cards">
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg></div>
<b>Living Room</b><div class="v">21.5°</div><small>Heating · auto</small>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2"/></svg></div>
<b>Lights</b><small>4 of 6 on</small><div class="toggleui" aria-hidden="true"></div>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M13 2L3 14h9l-1 8 10-12h-9z"/></svg></div>
<b>Energy Today</b><div class="v">8.2 kWh</div><small>−12% vs avg</small>
</div>
</div>
</main>
</div>
</section>
```
## CSS
```css
/* ─── 08 Glassmorphism Floating Sidebar — smart home ──────── */
@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&display=swap');
.sn-gls {
--sn-gls-txt: #f4f6ff;
--sn-gls-muted: rgba(244,246,255,.6);
--sn-gls-glass: rgba(255,255,255,.1);
--sn-gls-glass-brd: rgba(255,255,255,.22);
--sn-gls-active: rgba(255,255,255,.9);
position: relative;
width: 100%;
height: 600px;
font-family: 'Sora', sans-serif;
color: var(--sn-gls-txt);
background: radial-gradient(700px 700px at 8% 12%, #7c5cff 0%, transparent 55%), radial-gradient(900px 700px at 95% 20%, #ff5ca8 0%, transparent 50%), radial-gradient(800px 800px at 70% 100%, #2bd9c9 0%, transparent 55%), #14102b;
overflow: hidden;
box-sizing: border-box;
}
.sn-gls *,
.sn-gls *::before,
.sn-gls *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sn-gls::before {
content: "";
position: absolute;
width: 480px;
height: 480px;
border-radius: 50%;
background: radial-gradient(circle, #ffb347, transparent 65%);
top: 30%;
left: 40%;
filter: blur(40px);
opacity: .4;
animation: sn-gls-float 14s ease-in-out infinite;
pointer-events: none;
}
@keyframes sn-gls-float {
0%,
100% {
transform: translate(0, 0);
}
50% {
transform: translate(60px, -50px);
}
}
.sn-gls .layout {
display: flex;
height: 100%;
padding: 22px;
position: relative;
z-index: 1;
}
.sn-gls .sidebar {
width: 96px;
background: var(--sn-gls-glass);
backdrop-filter: blur(22px) saturate(160%);
-webkit-backdrop-filter: blur(22px) saturate(160%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 28px;
box-shadow: 0 18px 50px rgba(0,0,0,.28), inset 0 1px 0 rgba(255,255,255,.3);
display: flex;
flex-direction: column;
align-items: center;
padding: 1.4rem 0;
gap: .6rem;
flex-shrink: 0;
}
.sn-gls .logo {
width: 48px;
height: 48px;
border-radius: 16px;
background: linear-gradient(135deg, #fff, rgba(255,255,255,.6));
display: grid;
place-items: center;
color: #14102b;
font-weight: 800;
font-size: 1.4rem;
margin-bottom: 1rem;
box-shadow: 0 8px 24px rgba(0,0,0,.2);
flex-shrink: 0;
}
.sn-gls .nav-icon {
width: 52px;
height: 52px;
border-radius: 16px;
display: grid;
place-items: center;
color: var(--sn-gls-txt);
text-decoration: none;
position: relative;
transition: .25s;
flex-shrink: 0;
}
.sn-gls .nav-icon svg {
width: 23px;
height: 23px;
stroke-width: 1.8;
}
.sn-gls .nav-icon:hover {
background: rgba(255,255,255,.14);
}
.sn-gls .nav-icon.active {
background: var(--sn-gls-active);
color: #14102b;
box-shadow: 0 8px 22px rgba(0,0,0,.22);
}
.sn-gls .nav-icon .tip {
position: absolute;
left: 64px;
top: 50%;
transform: translateY(-50%) scale(.85);
background: rgba(20,16,43,.85);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
color: #fff;
font-size: .76rem;
padding: .35rem .7rem;
border-radius: 9px;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: .2s;
border: 1px solid var(--sn-gls-glass-brd);
z-index: 5;
}
.sn-gls .nav-icon:hover .tip {
opacity: 1;
transform: translateY(-50%) scale(1);
}
.sn-gls .spacer {
flex: 1;
}
.sn-gls .avatar {
width: 46px;
height: 46px;
border-radius: 50%;
border: 2px solid var(--sn-gls-glass-brd);
background: linear-gradient(135deg, #ff5ca8, #7c5cff);
flex-shrink: 0;
}
.sn-gls .contentpane {
flex: 1;
padding: 1.4rem 2rem;
min-width: 0;
overflow-y: auto;
}
.sn-gls .hello h1 {
font-size: 2.4rem;
font-weight: 800;
letter-spacing: -.03em;
}
.sn-gls .hello p {
color: var(--sn-gls-muted);
margin-top: .3rem;
}
.sn-gls .cards {
margin-top: 2rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
gap: 1.1rem;
max-width: 720px;
}
.sn-gls .gcard {
background: var(--sn-gls-glass);
backdrop-filter: blur(20px) saturate(150%);
-webkit-backdrop-filter: blur(20px) saturate(150%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 22px;
padding: 1.4rem;
box-shadow: 0 12px 36px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.25);
}
.sn-gls .gcard .ic {
width: 42px;
height: 42px;
border-radius: 13px;
background: rgba(255,255,255,.16);
display: grid;
place-items: center;
margin-bottom: 1rem;
}
.sn-gls .gcard .ic svg {
width: 21px;
height: 21px;
stroke: #fff;
}
.sn-gls .gcard b {
font-size: 1.05rem;
font-weight: 600;
}
.sn-gls .gcard .v {
font-size: 1.9rem;
font-weight: 800;
margin-top: .5rem;
letter-spacing: -.02em;
}
.sn-gls .gcard small {
color: var(--sn-gls-muted);
font-size: .8rem;
}
.sn-gls .toggleui {
margin-top: .9rem;
width: 46px;
height: 26px;
border-radius: 20px;
background: rgba(255,255,255,.9);
position: relative;
}
.sn-gls .toggleui::after {
content: "";
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background: #14102b;
top: 3px;
right: 3px;
}
@media (prefers-reduced-motion: reduce) {
.sn-gls::before {
animation: none;
}
.sn-gls .nav-icon,
.sn-gls .nav-icon .tip {
transition: none;
}
}
```Paste this into ChatGPT, Claude, Cursor, or any coding assistant. The block below is pre-framed with everything the AI needs to integrate this demo into your project — markup, styles, scoping notes, and the source URL. Hit Copy and paste straight into your chat.
Here's a working CSS Sidebar Navigation Design 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: Modern Glassmorphism Floating Sidebar Design in CSS
Source: https://codefronts.com/navigation/css-sidebar-navigation/modern-glassmorphism-floating-sidebar-design-in-css/
A smart-home control dashboard with a glassmorphic side nav and a true backdrop-blur effect. The rail floats with rounded corners over an animated ambient gradient, using backdrop-filter blur + saturation, inset highlights, and frosted hover tooltips. Matching glass stat cards (temperature, lights, energy). Vibrant, depth-driven, fully transparent layering — one of the cool modern CSS sidebar designs that proves how much identity a single rail can carry. Best for smart-home apps, modern dashboards, premium SaaS landing pages — anywhere the sidebar IS the brand visual.
## HTML
```html
<section class="sn-gls" aria-label="Glassmorphism floating sidebar demo">
<div class="layout">
<nav class="sidebar" aria-label="Smart-home navigation">
<div class="logo" aria-hidden="true">❋</div>
<a class="nav-icon active" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/></svg><span class="tip">Home</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/></svg><span class="tip">Lighting</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg><span class="tip">Climate</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><rect x="2" y="7" width="20" height="14" rx="2"/><path d="M16 21V5a2 2 0 00-2-2h-4a2 2 0 00-2 2v16"/></svg><span class="tip">Security</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M9 18V5l12-2v13"/><path d="M9 9h12"/></svg><span class="tip">Media</span></a>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><path d="M3 12h18M3 6h18M3 18h18"/></svg><span class="tip">Scenes</span></a>
<div class="spacer"></div>
<a class="nav-icon" href="#"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 01-2.83 2.83l-.06-.06a1.65 1.65 0 00-2.82 1.17V21a2 2 0 01-4 0v-.09A1.65 1.65 0 007 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 11-2.83-2.83l.06-.06A1.65 1.65 0 004.6 14H4.5a2 2 0 010-4h.09A1.65 1.65 0 006 8.6"/></svg><span class="tip">Settings</span></a>
<div class="avatar" aria-hidden="true"></div>
</nav>
<main class="contentpane">
<div class="hello">
<h1>Good evening, Ada</h1>
<p>A frosted glass rail floats above an ambient gradient — pure CSS backdrop-filter.</p>
</div>
<div class="cards">
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M14 4v10.5a4 4 0 11-4 0V4a2 2 0 014 0z"/></svg></div>
<b>Living Room</b><div class="v">21.5°</div><small>Heating · auto</small>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.2 4.2l1.4 1.4M18.4 18.4l1.4 1.4M1 12h2M21 12h2"/></svg></div>
<b>Lights</b><small>4 of 6 on</small><div class="toggleui" aria-hidden="true"></div>
</div>
<div class="gcard">
<div class="ic" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor"><path d="M13 2L3 14h9l-1 8 10-12h-9z"/></svg></div>
<b>Energy Today</b><div class="v">8.2 kWh</div><small>−12% vs avg</small>
</div>
</div>
</main>
</div>
</section>
```
## CSS
```css
/* ─── 08 Glassmorphism Floating Sidebar — smart home ──────── */
@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&display=swap');
.sn-gls {
--sn-gls-txt: #f4f6ff;
--sn-gls-muted: rgba(244,246,255,.6);
--sn-gls-glass: rgba(255,255,255,.1);
--sn-gls-glass-brd: rgba(255,255,255,.22);
--sn-gls-active: rgba(255,255,255,.9);
position: relative;
width: 100%;
height: 600px;
font-family: 'Sora', sans-serif;
color: var(--sn-gls-txt);
background: radial-gradient(700px 700px at 8% 12%, #7c5cff 0%, transparent 55%), radial-gradient(900px 700px at 95% 20%, #ff5ca8 0%, transparent 50%), radial-gradient(800px 800px at 70% 100%, #2bd9c9 0%, transparent 55%), #14102b;
overflow: hidden;
box-sizing: border-box;
}
.sn-gls *,
.sn-gls *::before,
.sn-gls *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sn-gls::before {
content: "";
position: absolute;
width: 480px;
height: 480px;
border-radius: 50%;
background: radial-gradient(circle, #ffb347, transparent 65%);
top: 30%;
left: 40%;
filter: blur(40px);
opacity: .4;
animation: sn-gls-float 14s ease-in-out infinite;
pointer-events: none;
}
@keyframes sn-gls-float {
0%,
100% {
transform: translate(0, 0);
}
50% {
transform: translate(60px, -50px);
}
}
.sn-gls .layout {
display: flex;
height: 100%;
padding: 22px;
position: relative;
z-index: 1;
}
.sn-gls .sidebar {
width: 96px;
background: var(--sn-gls-glass);
backdrop-filter: blur(22px) saturate(160%);
-webkit-backdrop-filter: blur(22px) saturate(160%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 28px;
box-shadow: 0 18px 50px rgba(0,0,0,.28), inset 0 1px 0 rgba(255,255,255,.3);
display: flex;
flex-direction: column;
align-items: center;
padding: 1.4rem 0;
gap: .6rem;
flex-shrink: 0;
}
.sn-gls .logo {
width: 48px;
height: 48px;
border-radius: 16px;
background: linear-gradient(135deg, #fff, rgba(255,255,255,.6));
display: grid;
place-items: center;
color: #14102b;
font-weight: 800;
font-size: 1.4rem;
margin-bottom: 1rem;
box-shadow: 0 8px 24px rgba(0,0,0,.2);
flex-shrink: 0;
}
.sn-gls .nav-icon {
width: 52px;
height: 52px;
border-radius: 16px;
display: grid;
place-items: center;
color: var(--sn-gls-txt);
text-decoration: none;
position: relative;
transition: .25s;
flex-shrink: 0;
}
.sn-gls .nav-icon svg {
width: 23px;
height: 23px;
stroke-width: 1.8;
}
.sn-gls .nav-icon:hover {
background: rgba(255,255,255,.14);
}
.sn-gls .nav-icon.active {
background: var(--sn-gls-active);
color: #14102b;
box-shadow: 0 8px 22px rgba(0,0,0,.22);
}
.sn-gls .nav-icon .tip {
position: absolute;
left: 64px;
top: 50%;
transform: translateY(-50%) scale(.85);
background: rgba(20,16,43,.85);
backdrop-filter: blur(8px);
-webkit-backdrop-filter: blur(8px);
color: #fff;
font-size: .76rem;
padding: .35rem .7rem;
border-radius: 9px;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: .2s;
border: 1px solid var(--sn-gls-glass-brd);
z-index: 5;
}
.sn-gls .nav-icon:hover .tip {
opacity: 1;
transform: translateY(-50%) scale(1);
}
.sn-gls .spacer {
flex: 1;
}
.sn-gls .avatar {
width: 46px;
height: 46px;
border-radius: 50%;
border: 2px solid var(--sn-gls-glass-brd);
background: linear-gradient(135deg, #ff5ca8, #7c5cff);
flex-shrink: 0;
}
.sn-gls .contentpane {
flex: 1;
padding: 1.4rem 2rem;
min-width: 0;
overflow-y: auto;
}
.sn-gls .hello h1 {
font-size: 2.4rem;
font-weight: 800;
letter-spacing: -.03em;
}
.sn-gls .hello p {
color: var(--sn-gls-muted);
margin-top: .3rem;
}
.sn-gls .cards {
margin-top: 2rem;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
gap: 1.1rem;
max-width: 720px;
}
.sn-gls .gcard {
background: var(--sn-gls-glass);
backdrop-filter: blur(20px) saturate(150%);
-webkit-backdrop-filter: blur(20px) saturate(150%);
border: 1px solid var(--sn-gls-glass-brd);
border-radius: 22px;
padding: 1.4rem;
box-shadow: 0 12px 36px rgba(0,0,0,.2), inset 0 1px 0 rgba(255,255,255,.25);
}
.sn-gls .gcard .ic {
width: 42px;
height: 42px;
border-radius: 13px;
background: rgba(255,255,255,.16);
display: grid;
place-items: center;
margin-bottom: 1rem;
}
.sn-gls .gcard .ic svg {
width: 21px;
height: 21px;
stroke: #fff;
}
.sn-gls .gcard b {
font-size: 1.05rem;
font-weight: 600;
}
.sn-gls .gcard .v {
font-size: 1.9rem;
font-weight: 800;
margin-top: .5rem;
letter-spacing: -.02em;
}
.sn-gls .gcard small {
color: var(--sn-gls-muted);
font-size: .8rem;
}
.sn-gls .toggleui {
margin-top: .9rem;
width: 46px;
height: 26px;
border-radius: 20px;
background: rgba(255,255,255,.9);
position: relative;
}
.sn-gls .toggleui::after {
content: "";
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background: #14102b;
top: 3px;
right: 3px;
}
@media (prefers-reduced-motion: reduce) {
.sn-gls::before {
animation: none;
}
.sn-gls .nav-icon,
.sn-gls .nav-icon .tip {
transition: none;
}
}
```