Klebrige Navigationskomponente - Neumorphes Pastell
Eine komplexe, klebrige Navigationskomponente mit einem Neumorphism-Designstil und einem pastellfarbenen Farbschema, das sich für Dokumentations- oder Wiki-Seiten eignet. Es verfügt über verschachtelte Navigationselemente, eine Suchleiste und Unterstützung für den Dunkelmodus, die alle mit HTML und Tailwind CSS implementiert sind, um eine vollständige Reaktionsfähigkeit zu gewährleisten.
HTML-Code
<header class="sticky top-0 z-50 bg-gray-100 p-4 shadow-xl dark:bg-gray-800 transition-colors duration-300 md:px-8">
<nav class="container mx-auto flex items-center justify-between flex-wrap">
<div class="flex items-center flex-shrink-0 text-gray-800 dark:text-gray-200 mr-6">
<a href="#" class="font-bold text-2xl tracking-tight text-pink-500 dark:text-purple-400 drop-shadow-md">Doc<span class="text-blue-400 dark:text-teal-300">Wiki</span></a>
</div>
<div class="block lg:hidden">
<button class="flex items-center px-3 py-2 border rounded text-gray-500 border-gray-400 hover:text-gray-900 hover:border-gray-900 dark:text-gray-400 dark:border-gray-500 dark:hover:text-gray-100 dark:hover:border-gray-100 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-400 group">
<svg class="fill-current h-3 w-3 group-hover:text-blue-500 dark:group-hover:text-teal-400" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><title>Menu</title><path d="M0 3h20v2H0V3zm0 6h20v2H0V9zm0 6h20v2H0v15z"/></svg>
</button>
</div>
<div class="w-full flex-grow lg:flex lg:items-center lg:w-auto hidden transition-all duration-300 ease-in-out" id="navbar-collapse">
<ul class="text-sm lg:flex-grow lg:flex lg:justify-end lg:items-center">
<li class="relative group lg:mr-6 mt-4 lg:mt-0">
<a href="#" class="block mt-4 lg:inline-block lg:mt-0 text-gray-600 dark:text-gray-300 hover:text-blue-500 dark:hover:text-teal-400 transition-colors duration-200 font-semibold py-2 px-3 rounded-xl
shadow-neumorphic-light-sm dark:shadow-neumorphic-dark-sm
active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark"
tabindex="0">
Features
<svg class="h-4 w-4 inline-block ml-1 group-hover:rotate-180 transition-transform duration-200" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
</svg>
</a>
<div class="lg:absolute lg:top-full lg:left-0 lg:w-48 bg-gray-100 dark:bg-gray-700 rounded-xl shadow-neumorphic-light-xl dark:shadow-neumorphic-dark-xl mt-2 lg:mt-4 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-300 transform lg:origin-top-left scale-y-75 group-hover:scale-y-100">
<a href="#" class="block px-4 py-2 text-gray-700 dark:text-gray-200 hover:bg-blue-100 dark:hover:bg-teal-700 rounded-lg transition-colors duration-200 shadow-sm active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">Overview</a>
<a href="#" class="block px-4 py-2 text-gray-700 dark:text-gray-200 hover:bg-blue-100 dark:hover:bg-teal-700 rounded-lg transition-colors duration-200 shadow-sm active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">API Reference</a>
<a href="#" class="block px-4 py-2 text-gray-700 dark:text-gray-200 hover:bg-blue-100 dark:hover:bg-teal-700 rounded-lg transition-colors duration-200 shadow-sm active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">Integrations</a>
</div>
</li>
<li class="relative group lg:mr-6 mt-4 lg:mt-0">
<a href="#" class="block mt-4 lg:inline-block lg:mt-0 text-gray-600 dark:text-gray-300 hover:text-blue-500 dark:hover:text-teal-400 transition-colors duration-200 font-semibold py-2 px-3 rounded-xl
shadow-neumorphic-light-sm dark:shadow-neumorphic-dark-sm
active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark"
tabindex="0">
Guides
<svg class="h-4 w-4 inline-block ml-1 group-hover:rotate-180 transition-transform duration-200" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
</svg>
</a>
<div class="lg:absolute lg:top-full lg:left-0 lg:w-48 bg-gray-100 dark:bg-gray-700 rounded-xl shadow-neumorphic-light-xl dark:shadow-neumorphic-dark-xl mt-2 lg:mt-4 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-300 transform lg:origin-top-left scale-y-75 group-hover:scale-y-100">
<a href="#" class="block px-4 py-2 text-gray-700 dark:text-gray-200 hover:bg-pink-100 dark:hover:bg-purple-700 rounded-lg transition-colors duration-200 shadow-sm active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">Getting Started</a>
<a href="#" class="block px-4 py-2 text-gray-700 dark:text-gray-200 hover:bg-pink-100 dark:hover:bg-purple-700 rounded-lg transition-colors duration-200 shadow-sm active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">Best Practices</a>
<a href="#" class="block px-4 py-2 text-gray-700 dark:text-gray-200 hover:bg-pink-100 dark:hover:bg-purple-700 rounded-lg transition-colors duration-200 shadow-sm active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">Troubleshooting</a>
</div>
</li>
<li class="lg:mr-6 mt-4 lg:mt-0">
<a href="#" class="block mt-4 lg:inline-block lg:mt-0 text-gray-600 dark:text-gray-300 hover:text-blue-500 dark:hover:text-teal-400 transition-colors duration-200 font-semibold py-2 px-3 rounded-xl
shadow-neumorphic-light-sm dark:shadow-neumorphic-dark-sm
active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">
Community
</a>
</li>
<li class="lg:mr-6 mt-4 lg:mt-0">
<a href="#" class="block mt-4 lg:inline-block lg:mt-0 text-gray-600 dark:text-gray-300 hover:text-blue-500 dark:hover:text-teal-400 transition-colors duration-200 font-semibold py-2 px-3 rounded-xl
shadow-neumorphic-light-sm dark:shadow-neumorphic-dark-sm
active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark">
Blog
</a>
</li>
</ul>
<div class="mt-4 lg:mt-0 flex items-center">
<div class="relative w-full lg:max-w-xs">
<input type="search" placeholder="Search..." class="block w-full pl-10 pr-4 py-2 rounded-full text-gray-700 dark:text-gray-200 bg-gray-200 dark:bg-gray-700 border-none
shadow-neumorphic-inset-light dark:shadow-neumorphic-inset-dark
focus:outline-none focus:ring-2 focus:ring-blue-300 dark:focus:ring-teal-500 transition-all duration-200 placeholder-gray-500 dark:placeholder-gray-400">
<div class="absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-500 dark:text-gray-400">
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>
</div>
</div>
<button class="ml-4 p-2 rounded-full bg-gray-200 dark:bg-gray-700 text-gray-600 dark:text-gray-300
shadow-neumorphic-light-md dark:shadow-neumorphic-dark-md
active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark
hover:text-blue-500 dark:hover:text-teal-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-400 transition-all duration-200">
<svg class="h-5 w-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h1M3 12H2m8.058-9.058l1.414-1.414M12.942 21.058l-1.414 1.414M21.058 12.942l-1.414 1.414M2.942 11.058l1.414-1.414M16.5 12a4.5 4.5 0 11-9 0 4.5 4.5 0 019 0z"></path></svg>
<span class="sr-only">Toggle Dark Mode</span>
</button>
<a href="#" class="ml-4 p-1 rounded-full
shadow-neumorphic-light-md dark:shadow-neumorphic-dark-md
active:shadow-neumorphic-inset-light dark:active:shadow-neumorphic-inset-dark
transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-400">
<img class="h-8 w-8 rounded-full object-cover" src="https://randomuser.me/api/portraits/women/44.jpg" alt="User Avatar">
<span class="sr-only">User Profile</span>
</a>
</div>
</div>
</nav>
</header>
<style>
/* Base light neumorphic shadows */
.shadow-neumorphic-light-sm {
box-shadow: 3px 3px 6px #b8b8b8, -3px -3px 6px #ffffff;
}
.shadow-neumorphic-light-md {
box-shadow: 5px 5px 10px #b8b8b8, -5px -5px 10px #ffffff;
}
.shadow-neumorphic-light-xl {
box-shadow: 10px 10px 20px #b8b8b8, -10px -10px 20px #ffffff;
}
/* Inset light neumorphic shadows */
.shadow-neumorphic-inset-light {
box-shadow: inset 3px 3px 6px #b8b8b8, inset -3px -3px 6px #ffffff;
}
/* Base dark neumorphic shadows */
.dark .shadow-neumorphic-dark-sm {
box-shadow: 3px 3px 6px #4d4d4d, -3px -3px 6px #2d2d2d;
}
.dark .shadow-neumorphic-dark-md {
box-shadow: 5px 5px 10px #4d4d4d, -5px -5px 10px #2d2d2d;
}
.dark .shadow-neumorphic-dark-xl {
box-shadow: 10px 10px 20px #4d4d4d, -10px -10px 20px #2d2d2d;
}
/* Inset dark neumorphic shadows */
.dark .shadow-neumorphic-inset-dark {
box-shadow: inset 3px 3px 6px #4d4d4d, inset -3px -3px 6px #2d2d2d;
}
/* Override Tailwind shadow for header shadow-xl */
.shadow-xl {
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.dark .shadow-xl {
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
}
/* Hamburger menu JS to toggle content */
@media (max-width: 1023px) {
.lg\:hidden + div {
display: none;
}
.lg\:hidden + div.active {
display: block;
}
}
/* Simple JS for mobile menu and dark mode toggle */
document.addEventListener('DOMContentLoaded', () => {
const menuButton = document.querySelector('.lg\:hidden button');
const navCollapse = document.getElementById('navbar-collapse');
const darkModeToggle = document.querySelector('button[aria-label="Toggle Dark Mode"]');
// Mobile menu toggle
if (menuButton && navCollapse) {
menuButton.addEventListener('click', () => {
navCollapse.classList.toggle('hidden');
if (!navCollapse.classList.contains('hidden')) {
navCollapse.classList.add('active'); // Add active for custom CSS display
} else {
navCollapse.classList.remove('active');
}
});
}
// Dark mode toggle
if (darkModeToggle) {
darkModeToggle.addEventListener('click', () => {
document.documentElement.classList.toggle('dark');
// Save preference (optional)
if (document.documentElement.classList.contains('dark')) {
localStorage.setItem('theme', 'dark');
} else {
localStorage.setItem('theme', 'light');
}
});
// Apply saved theme on load (optional)
if (localStorage.getItem('theme') === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
}
// Close dropdowns when clicking outside (basic, for demonstration)
document.addEventListener('click', (e) => {
document.querySelectorAll('.group.relative').forEach(dropdown => {
if (!dropdown.contains(e.target)) {
dropdown.querySelector('div')?.classList.remove('opacity-100', 'visible', 'scale-y->100');
dropdown.querySelector('div')?.classList.add('opacity-0', 'invisible', 'scale-y-75');
dropdown.querySelector('a svg')?.classList.remove('rotate-180');
}
});
});
// For accessibility/keyboard navigation for dropdowns (complex; basic example)
document.querySelectorAll('.group.relative > a').forEach(link => {
link.addEventListener('focus', () => {
link.parentElement.querySelector('div[role="menu"]')?.classList.add('opacity-100', 'visible', 'scale-y-100');
link.parentElement.querySelector('div[role="menu"]')?.classList.remove('opacity-0', 'invisible', 'scale-y-75');
});
link.addEventListener('blur', (event) => {
if (!link.parentElement.contains(event.relatedTarget)) {
link.parentElement.querySelector('div[role="menu"]')?.classList.remove('opacity-100', 'visible', 'scale-y-100');
link.parentElement.querySelector('div[role="menu"]')?.classList.add('opacity-0', 'invisible', 'scale-y-75');
}
});
});
});
<\/style>
Verwandte Komponenten
Sticky Navigation-Komponente
Eine klebrige Navigationskomponente in einem skeuomorphen Stil mit Komplementärfarben, die sich für ein Portfolio mit einer reichhaltigen Benutzeroberfläche eignet.
Sticky Navigation-Komponente
Eine einfache, saubere und kontrastreiche Sticky-Navigationsleiste mit Monospace-/Entwickler-Ästhetik, die sich für Unterhaltungs- oder Medienplattformen eignet.
Sticky Navigation-Komponente
Eine reaktionsschnelle, klebrige Navigationsleiste mit Neon-/Leuchteffekten, die sich für Bildungs- oder Lernplattformen eignet. Verfügt über ein lila/violettes Farbschema, Unterstützung für den Dunkelmodus und interaktive Menüpunkte.