A stunning liquid glass navigation bar with liquid distortion effects and interactive hover states
<!-- SVG Filter for Glass Distortion -->
<svg style="display: none">
<filter id="glass-distortion">
<feTurbulence type="turbulence" baseFrequency="0.008" numOctaves="2" result="noise" />
<feDisplacementMap in="SourceGraphic" in2="noise" scale="77" />
</filter>
</svg>
<nav class="glass-nav">
<div class="glass-filter"></div>
<div class="glass-overlay"></div>
<div class="glass-specular"></div>
<div class="glass-content">
<ul class="nav-list">
<li><a href="#" class="nav-item active">Home</a></li>
<li><a href="#" class="nav-item">About</a></li>
<li><a href="#" class="nav-item">Services</a></li>
<li><a href="#" class="nav-item">Contact</a></li>
</ul>
</div>
</nav>
/* Glass Navigation Container */
.glass-nav {
--bg-color: rgba(255, 255, 255, 0.25);
--highlight: rgba(255, 255, 255, 0.75);
--text: #ffffff;
position: relative;
width: 100%;
max-width: 600px;
border-radius: 12px;
overflow: hidden;
background: transparent;
}
.glass-filter,
.glass-overlay,
.glass-specular {
position: absolute;
inset: 0;
border-radius: inherit;
}
.glass-filter {
z-index: 1;
backdrop-filter: blur(4px);
filter: url(#glass-distortion) saturate(120%) brightness(1.15);
}
.glass-overlay {
z-index: 2;
background: var(--bg-color);
}
.glass-specular {
z-index: 3;
box-shadow: inset 1px 1px 1px var(--highlight);
}
.glass-content {
position: relative;
z-index: 4;
padding: 16px;
}
.nav-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
gap: 24px;
}
.nav-item {
color: var(--text);
text-decoration: none;
font-weight: 500;
font-size: 16px;
padding: 8px 16px;
border-radius: 8px;
transition: background-color 0.2s ease;
}
.nav-item:hover {
background-color: rgba(255, 255, 255, 0.1);
}
.nav-item.active {
background-color: rgba(255, 255, 255, 0.2);
}
/* Dark mode styles */
@media (prefers-color-scheme: dark) {
.glass-nav {
--bg-color: rgba(0, 0, 0, 0.25);
--highlight: rgba(255, 255, 255, 0.15);
}
}
document.addEventListener('DOMContentLoaded', function() {
// Add nav item click handler
const navItems = document.querySelectorAll('.nav-item');
navItems.forEach(item => {
item.addEventListener('click', function(e) {
e.preventDefault();
navItems.forEach(navItem => navItem.classList.remove('active'));
this.classList.add('active');
});
});
});