Menú de Navegación Moderno
Un menú de navegación responsive con animaciones suaves, menú hamburguesa móvil, submenús desplegables y soporte para temas
Diseño Responsivo
Sí
Soporte para Modo Oscuro
No
líneas
219
Compatibilidad del Navegador
No
Vista Previa en Vivo
Interactúa con el componente sin salir de la página.
Menú de Navegación Moderno
Un menú de navegación completamente responsive con animaciones suaves, menú hamburguesa para móviles, submenús desplegables y soporte para múltiples temas.
Características
- Diseño Responsive: Se adapta perfectamente a todos los tamaños de pantalla
- Menú Hamburguesa Móvil: Navegación optimizada para dispositivos móviles
- Submenús Desplegables: Menús anidados con animaciones suaves
- Animaciones Fluidas: Transiciones CSS elegantes y naturales
- Indicador de Estado Activo: Resalta la página actual
- Integración de Búsqueda: Barra de búsqueda incorporada
- Soporte de Temas: Compatible con modo claro y oscuro
- Accesibilidad: Navegación por teclado y lectores de pantalla
Demostración
<nav class="modern-nav">
<div class="nav-container">
<!-- Logo -->
<div class="nav-logo">
<a href="#" class="logo-link">
<svg class="logo-icon" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/>
</svg>
<span class="logo-text">MiSitio</span>
</a>
</div>
<!-- Búsqueda -->
<div class="nav-search">
<div class="search-container">
<input type="text" class="search-input" placeholder="Buscar...">
<button class="search-btn">
<svg viewBox="0 0 24 24" fill="currentColor">
<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>
</svg>
</button>
</div>
</div>
<!-- Menú Principal -->
<ul class="nav-menu">
<li class="nav-item">
<a href="#" class="nav-link active">Inicio</a>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle">Productos</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-link">Aplicaciones Web</a></li>
<li><a href="#" class="dropdown-link">Aplicaciones Móviles</a></li>
<li><a href="#" class="dropdown-link">APIs</a></li>
<li><a href="#" class="dropdown-link">Consultoría</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle">Servicios</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-link">Desarrollo</a></li>
<li><a href="#" class="dropdown-link">Diseño</a></li>
<li><a href="#" class="dropdown-link">Marketing</a></li>
<li class="dropdown-submenu">
<a href="#" class="dropdown-link">Soporte</a>
<ul class="submenu">
<li><a href="#" class="dropdown-link">24/7</a></li>
<li><a href="#" class="dropdown-link">Empresarial</a></li>
<li><a href="#" class="dropdown-link">Premium</a></li>
</ul>
</li>
</ul>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Acerca de</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Contacto</a>
</li>
</ul>
<!-- Botones de Acción -->
<div class="nav-actions">
<button class="theme-toggle" aria-label="Cambiar tema">
<svg class="theme-icon sun" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 18c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6zm0-10c-2.2 0-4 1.8-4 4s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4z"/>
<path d="M12 2l1.09 2.09L15 3l-1.09 1.09L12 6 10.91 4.91 9 3l2.09-1.09L12 2zm0 14l1.09 2.09L15 17l-1.09 1.09L12 20l-1.09-1.91L9 17l2.09-1.09L12 16z"/>
</svg>
<svg class="theme-icon moon" viewBox="0 0 24 24" fill="currentColor">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
</svg>
</button>
<a href="#" class="btn-primary">Comenzar</a>
</div>
<!-- Botón Hamburguesa -->
<button class="mobile-toggle" aria-label="Abrir menú">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</button>
</div>
<!-- Overlay Móvil -->
<div class="mobile-overlay"></div>
</nav>.modern-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.nav-container {
max-width: 1200px;
margin: 0 auto;
padding: 0 1rem;
display: flex;
align-items: center;
justify-content: space-between;
height: 70px;
}
/* Logo */
.nav-logo .logo-link {
display: flex;
align-items: center;
gap: 0.5rem;
text-decoration: none;
color: #1a1a1a;
font-weight: 700;
font-size: 1.25rem;
}
.logo-icon {
width: 32px;
height: 32px;
color: #3b82f6;
}
/* Búsqueda */
.nav-search {
flex: 1;
max-width: 400px;
margin: 0 2rem;
}
.search-container {
position: relative;
display: flex;
align-items: center;
}
.search-input {
width: 100%;
padding: 0.75rem 1rem;
padding-right: 3rem;
border: 2px solid #e5e7eb;
border-radius: 50px;
background: #f9fafb;
font-size: 0.875rem;
transition: all 0.3s ease;
}
.search-input:focus {
outline: none;
border-color: #3b82f6;
background: white;
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);
}
.search-btn {
position: absolute;
right: 0.5rem;
padding: 0.5rem;
background: none;
border: none;
color: #6b7280;
cursor: pointer;
border-radius: 50%;
transition: all 0.2s ease;
}
.search-btn:hover {
background: #f3f4f6;
color: #3b82f6;
}
.search-btn svg {
width: 20px;
height: 20px;
}
/* Menú Principal */
.nav-menu {
display: flex;
align-items: center;
gap: 2rem;
list-style: none;
margin: 0;
padding: 0;
}
.nav-link {
text-decoration: none;
color: #4b5563;
font-weight: 500;
padding: 0.5rem 0;
position: relative;
transition: color 0.3s ease;
}
.nav-link:hover,
.nav-link.active {
color: #3b82f6;
}
.nav-link.active::after {
content: '';
position: absolute;
bottom: -1rem;
left: 0;
right: 0;
height: 2px;
background: #3b82f6;
border-radius: 1px;
}
/* Dropdown */
.dropdown {
position: relative;
}
.dropdown-toggle::after {
content: '';
display: inline-block;
width: 0;
height: 0;
margin-left: 0.5rem;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 4px solid currentColor;
transition: transform 0.3s ease;
}
.dropdown:hover .dropdown-toggle::after {
transform: rotate(180deg);
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
min-width: 200px;
background: white;
border-radius: 8px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: all 0.3s ease;
list-style: none;
padding: 0.5rem 0;
margin: 0;
z-index: 100;
}
.dropdown:hover .dropdown-menu {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.dropdown-link {
display: block;
padding: 0.75rem 1rem;
color: #4b5563;
text-decoration: none;
transition: all 0.2s ease;
}
.dropdown-link:hover {
background: #f3f4f6;
color: #3b82f6;
}
/* Submenu */
.dropdown-submenu {
position: relative;
}
.submenu {
position: absolute;
top: 0;
left: 100%;
min-width: 150px;
background: white;
border-radius: 8px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
opacity: 0;
visibility: hidden;
transform: translateX(-10px);
transition: all 0.3s ease;
list-style: none;
padding: 0.5rem 0;
margin: 0;
}
.dropdown-submenu:hover .submenu {
opacity: 1;
visibility: visible;
transform: translateX(0);
}
/* Acciones */
.nav-actions {
display: flex;
align-items: center;
gap: 1rem;
}
.theme-toggle {
position: relative;
width: 40px;
height: 40px;
border: none;
background: #f3f4f6;
border-radius: 50%;
cursor: pointer;
transition: all 0.3s ease;
}
.theme-toggle:hover {
background: #e5e7eb;
}
.theme-icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 20px;
height: 20px;
transition: all 0.3s ease;
}
.theme-icon.moon {
opacity: 0;
transform: translate(-50%, -50%) rotate(180deg);
}
.dark .theme-icon.sun {
opacity: 0;
transform: translate(-50%, -50%) rotate(180deg);
}
.dark .theme-icon.moon {
opacity: 1;
transform: translate(-50%, -50%) rotate(0deg);
}
.btn-primary {
padding: 0.75rem 1.5rem;
background: linear-gradient(135deg, #3b82f6, #1d4ed8);
color: white;
text-decoration: none;
border-radius: 50px;
font-weight: 600;
transition: all 0.3s ease;
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px rgba(59, 130, 246, 0.3);
}
/* Botón Móvil */
.mobile-toggle {
display: none;
flex-direction: column;
justify-content: center;
width: 40px;
height: 40px;
background: none;
border: none;
cursor: pointer;
padding: 0;
}
.hamburger-line {
width: 25px;
height: 3px;
background: #4b5563;
margin: 2px 0;
transition: all 0.3s ease;
border-radius: 2px;
}
.mobile-toggle.active .hamburger-line:nth-child(1) {
transform: rotate(45deg) translate(6px, 6px);
}
.mobile-toggle.active .hamburger-line:nth-child(2) {
opacity: 0;
}
.mobile-toggle.active .hamburger-line:nth-child(3) {
transform: rotate(-45deg) translate(6px, -6px);
}
/* Overlay Móvil */
.mobile-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
z-index: 999;
}
.mobile-overlay.active {
opacity: 1;
visibility: visible;
}
/* Tema Oscuro */
.dark .modern-nav {
background: rgba(17, 24, 39, 0.95);
border-bottom-color: rgba(255, 255, 255, 0.1);
}
.dark .nav-logo .logo-link {
color: white;
}
.dark .search-input {
background: #374151;
border-color: #4b5563;
color: white;
}
.dark .search-input:focus {
background: #4b5563;
border-color: #3b82f6;
}
.dark .nav-link {
color: #d1d5db;
}
.dark .nav-link:hover,
.dark .nav-link.active {
color: #60a5fa;
}
.dark .dropdown-menu,
.dark .submenu {
background: #374151;
}
.dark .dropdown-link {
color: #d1d5db;
}
.dark .dropdown-link:hover {
background: #4b5563;
color: #60a5fa;
}
.dark .theme-toggle {
background: #4b5563;
}
.dark .theme-toggle:hover {
background: #6b7280;
}
.dark .hamburger-line {
background: #d1d5db;
}
/* Responsive */
@media (max-width: 1024px) {
.nav-search {
display: none;
}
}
@media (max-width: 768px) {
.nav-menu,
.nav-actions .btn-primary {
display: none;
}
.mobile-toggle {
display: flex;
}
.nav-menu.mobile-active {
display: flex;
position: fixed;
top: 70px;
left: 0;
right: 0;
bottom: 0;
background: white;
flex-direction: column;
align-items: flex-start;
padding: 2rem;
gap: 1rem;
overflow-y: auto;
z-index: 1000;
}
.dark .nav-menu.mobile-active {
background: #1f2937;
}
.nav-item {
width: 100%;
}
.nav-link {
display: block;
padding: 1rem 0;
font-size: 1.125rem;
border-bottom: 1px solid #e5e7eb;
}
.dark .nav-link {
border-bottom-color: #374151;
}
.dropdown-menu {
position: static;
opacity: 1;
visibility: visible;
transform: none;
box-shadow: none;
background: #f9fafb;
margin-top: 0.5rem;
border-radius: 8px;
}
.dark .dropdown-menu {
background: #374151;
}
.submenu {
position: static;
opacity: 1;
visibility: visible;
transform: none;
margin-left: 1rem;
margin-top: 0.5rem;
}
}
@media (max-width: 480px) {
.nav-container {
padding: 0 0.5rem;
}
.logo-text {
display: none;
}
.nav-actions {
gap: 0.5rem;
}
}class ModernNavigation {
constructor(selector) {
this.nav = document.querySelector(selector);
this.mobileToggle = this.nav.querySelector('.mobile-toggle');
this.navMenu = this.nav.querySelector('.nav-menu');
this.overlay = this.nav.querySelector('.mobile-overlay');
this.themeToggle = this.nav.querySelector('.theme-toggle');
this.searchInput = this.nav.querySelector('.search-input');
this.dropdowns = this.nav.querySelectorAll('.dropdown');
this.isMenuOpen = false;
this.currentTheme = localStorage.getItem('theme') || 'light';
this.init();
}
init() {
this.setupEventListeners();
this.setupTheme();
this.setupSearch();
this.setupDropdowns();
this.setupScrollEffect();
this.setupKeyboardNavigation();
}
setupEventListeners() {
// Toggle móvil
this.mobileToggle.addEventListener('click', () => this.toggleMobileMenu());
// Overlay
this.overlay.addEventListener('click', () => this.closeMobileMenu());
// Toggle de tema
this.themeToggle.addEventListener('click', () => this.toggleTheme());
// Cerrar menú al redimensionar
window.addEventListener('resize', () => {
if (window.innerWidth > 768 && this.isMenuOpen) {
this.closeMobileMenu();
}
});
// Cerrar menú al hacer clic en enlaces
this.navMenu.addEventListener('click', (e) => {
if (e.target.classList.contains('nav-link') && this.isMenuOpen) {
this.closeMobileMenu();
}
});
}
toggleMobileMenu() {
this.isMenuOpen = !this.isMenuOpen;
this.mobileToggle.classList.toggle('active', this.isMenuOpen);
this.navMenu.classList.toggle('mobile-active', this.isMenuOpen);
this.overlay.classList.toggle('active', this.isMenuOpen);
// Prevenir scroll del body
document.body.style.overflow = this.isMenuOpen ? 'hidden' : '';
// Actualizar aria-expanded
this.mobileToggle.setAttribute('aria-expanded', this.isMenuOpen);
}
closeMobileMenu() {
this.isMenuOpen = false;
this.mobileToggle.classList.remove('active');
this.navMenu.classList.remove('mobile-active');
this.overlay.classList.remove('active');
document.body.style.overflow = '';
this.mobileToggle.setAttribute('aria-expanded', 'false');
}
setupTheme() {
document.documentElement.classList.toggle('dark', this.currentTheme === 'dark');
}
toggleTheme() {
this.currentTheme = this.currentTheme === 'light' ? 'dark' : 'light';
document.documentElement.classList.toggle('dark', this.currentTheme === 'dark');
localStorage.setItem('theme', this.currentTheme);
// Disparar evento personalizado
window.dispatchEvent(new CustomEvent('themeChanged', {
detail: { theme: this.currentTheme }
}));
}
setupSearch() {
if (!this.searchInput) return;
let searchTimeout;
this.searchInput.addEventListener('input', (e) => {
clearTimeout(searchTimeout);
searchTimeout = setTimeout(() => {
this.performSearch(e.target.value);
}, 300);
});
// Búsqueda con Enter
this.searchInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') {
e.preventDefault();
this.performSearch(e.target.value);
}
});
}
performSearch(query) {
if (query.trim().length < 2) return;
// Disparar evento de búsqueda personalizado
window.dispatchEvent(new CustomEvent('navSearch', {
detail: { query: query.trim() }
}));
console.log('Buscando:', query);
}
setupDropdowns() {
this.dropdowns.forEach(dropdown => {
const toggle = dropdown.querySelector('.dropdown-toggle');
const menu = dropdown.querySelector('.dropdown-menu');
if (!toggle || !menu) return;
// Hover para desktop
dropdown.addEventListener('mouseenter', () => {
if (window.innerWidth > 768) {
this.showDropdown(dropdown);
}
});
dropdown.addEventListener('mouseleave', () => {
if (window.innerWidth > 768) {
this.hideDropdown(dropdown);
}
});
// Click para móvil
toggle.addEventListener('click', (e) => {
if (window.innerWidth <= 768) {
e.preventDefault();
this.toggleDropdown(dropdown);
}
});
});
}
showDropdown(dropdown) {
const menu = dropdown.querySelector('.dropdown-menu');
menu.style.display = 'block';
setTimeout(() => {
menu.classList.add('show');
}, 10);
}
hideDropdown(dropdown) {
const menu = dropdown.querySelector('.dropdown-menu');
menu.classList.remove('show');
setTimeout(() => {
menu.style.display = 'none';
}, 300);
}
toggleDropdown(dropdown) {
const menu = dropdown.querySelector('.dropdown-menu');
const isVisible = menu.style.display === 'block';
if (isVisible) {
this.hideDropdown(dropdown);
} else {
// Cerrar otros dropdowns
this.dropdowns.forEach(d => {
if (d !== dropdown) this.hideDropdown(d);
});
this.showDropdown(dropdown);
}
}
setupScrollEffect() {
let lastScrollY = window.scrollY;
window.addEventListener('scroll', () => {
const currentScrollY = window.scrollY;
// Ocultar/mostrar navegación al hacer scroll
if (currentScrollY > lastScrollY && currentScrollY > 100) {
this.nav.style.transform = 'translateY(-100%)';
} else {
this.nav.style.transform = 'translateY(0)';
}
// Cambiar opacidad del fondo
const opacity = Math.min(currentScrollY / 100, 0.95);
this.nav.style.background = `rgba(255, 255, 255, ${opacity})`;
if (document.documentElement.classList.contains('dark')) {
this.nav.style.background = `rgba(17, 24, 39, ${opacity})`;
}
lastScrollY = currentScrollY;
});
}
setupKeyboardNavigation() {
this.nav.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && this.isMenuOpen) {
this.closeMobileMenu();
}
});
// Navegación con Tab
const focusableElements = this.nav.querySelectorAll(
'a, button, input, [tabindex]:not([tabindex="-1"])'
);
focusableElements.forEach((element, index) => {
element.addEventListener('keydown', (e) => {
if (e.key === 'Tab') {
// Lógica de navegación circular
if (e.shiftKey && index === 0) {
e.preventDefault();
focusableElements[focusableElements.length - 1].focus();
} else if (!e.shiftKey && index === focusableElements.length - 1) {
e.preventDefault();
focusableElements[0].focus();
}
}
});
});
}
// API pública
setActiveLink(href) {
const links = this.nav.querySelectorAll('.nav-link');
links.forEach(link => {
link.classList.toggle('active', link.getAttribute('href') === href);
});
}
addMenuItem(item, parentSelector = '.nav-menu') {
const parent = this.nav.querySelector(parentSelector);
if (!parent) return;
const li = document.createElement('li');
li.className = 'nav-item';
li.innerHTML = `<a href="${item.href}" class="nav-link">${item.text}</a>`;
parent.appendChild(li);
}
updateSearchPlaceholder(text) {
if (this.searchInput) {
this.searchInput.placeholder = text;
}
}
destroy() {
// Limpiar event listeners
this.mobileToggle.removeEventListener('click', this.toggleMobileMenu);
this.overlay.removeEventListener('click', this.closeMobileMenu);
this.themeToggle.removeEventListener('click', this.toggleTheme);
// Restaurar estilos
document.body.style.overflow = '';
this.nav.style.transform = '';
this.nav.style.background = '';
}
}
// Inicialización automática
document.addEventListener('DOMContentLoaded', () => {
const navigation = new ModernNavigation('.modern-nav');
// Hacer disponible globalmente
window.modernNav = navigation;
// Ejemplo de uso de eventos
window.addEventListener('navSearch', (e) => {
console.log('Búsqueda realizada:', e.detail.query);
// Aquí puedes implementar tu lógica de búsqueda
});
window.addEventListener('themeChanged', (e) => {
console.log('Tema cambiado a:', e.detail.theme);
// Aquí puedes implementar lógica adicional para el cambio de tema
});
});Ejemplos de Uso
Configuración Básica
// Inicialización simple
const nav = new ModernNavigation('.modern-nav');
// Establecer enlace activo
nav.setActiveLink('/productos');
// Agregar nuevo elemento de menú
nav.addMenuItem({
href: '/blog',
text: 'Blog'
});Integración con Router
// Actualizar navegación basada en la ruta
function updateNavigation(currentPath) {
window.modernNav.setActiveLink(currentPath);
}
// Escuchar cambios de ruta
window.addEventListener('popstate', () => {
updateNavigation(window.location.pathname);
});Búsqueda Personalizada
window.addEventListener('navSearch', async (e) => {
const query = e.detail.query;
try {
const results = await fetch(`/api/search?q=${encodeURIComponent(query)}`);
const data = await results.json();
// Mostrar resultados
displaySearchResults(data);
} catch (error) {
console.error('Error en la búsqueda:', error);
}
});API de Métodos
| Método | Descripción | Parámetros |
|---|---|---|
setActiveLink(href) | Establece el enlace activo | href: URL del enlace |
addMenuItem(item, parent) | Agrega un elemento al menú | item: objeto con href y text |
updateSearchPlaceholder(text) | Actualiza el placeholder de búsqueda | text: nuevo texto |
toggleMobileMenu() | Alterna el menú móvil | - |
closeMobileMenu() | Cierra el menú móvil | - |
toggleTheme() | Cambia entre tema claro y oscuro | - |
destroy() | Limpia event listeners y estilos | - |
Opciones de Personalización
Variables CSS
:root {
--nav-height: 70px;
--nav-bg: rgba(255, 255, 255, 0.95);
--nav-border: rgba(0, 0, 0, 0.1);
--nav-text: #4b5563;
--nav-text-hover: #3b82f6;
--nav-active: #3b82f6;
--dropdown-bg: white;
--dropdown-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
--search-bg: #f9fafb;
--search-border: #e5e7eb;
--search-focus: #3b82f6;
}Configuración de Tema
const navConfig = {
autoHide: true,
searchEnabled: true,
themeToggle: true,
mobileBreakpoint: 768,
scrollThreshold: 100
};
const nav = new ModernNavigation('.modern-nav', navConfig);Accesibilidad
- Navegación por Teclado: Soporte completo para Tab, Enter y Escape
- ARIA Labels: Etiquetas descriptivas para lectores de pantalla
- Contraste: Cumple con WCAG 2.1 AA
- Focus Visible: Indicadores claros de foco
- Semántica: HTML semántico con roles apropiados
Soporte de Navegadores
- Chrome 60+
- Firefox 55+
- Safari 12+
- Edge 79+
- iOS Safari 12+
- Android Chrome 60+
Consideraciones de Rendimiento
- CSS Optimizado: Uso eficiente de transformaciones y transiciones
- JavaScript Ligero: ~8KB minificado y gzipped
- Lazy Loading: Carga diferida de elementos no críticos
- Debounced Search: Búsqueda optimizada con retraso
- Event Delegation: Gestión eficiente de eventos
Ejemplo de Integración
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mi Sitio Web</title>
<link rel="stylesheet" href="navigation.css">
</head>
<body>
<!-- Navegación -->
<nav class="modern-nav">
<!-- Contenido del menú aquí -->
</nav>
<!-- Contenido principal -->
<main style="margin-top: 70px; padding: 2rem;">
<h1>Contenido Principal</h1>
<p>Tu contenido aquí...</p>
</main>
<script src="navigation.js"></script>
<script>
// Configuración personalizada
document.addEventListener('DOMContentLoaded', () => {
const nav = new ModernNavigation('.modern-nav');
// Configurar búsqueda personalizada
window.addEventListener('navSearch', (e) => {
// Tu lógica de búsqueda aquí
console.log('Buscando:', e.detail.query);
});
});
</script>
</body>
</html>HTML
38
líneas
CSS
181
líneas
<nav class="modern-nav">
<div class="nav-container">
<div class="nav-brand">
<a href="#" class="brand-link">Logo</a>
</div>
<button class="nav-toggle" id="navToggle">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</button>
<div class="nav-menu" id="navMenu">
<ul class="nav-list">
<li class="nav-item">
<a href="#" class="nav-link">Inicio</a>
</li>
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle">Servicios</a>
<ul class="dropdown-menu">
<li><a href="#" class="dropdown-link">Desarrollo Web</a></li>
<li><a href="#" class="dropdown-link">Diseño UI/UX</a></li>
<li><a href="#" class="dropdown-link">Marketing Digital</a></li>
</ul>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Portafolio</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Blog</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Contacto</a>
</li>
</ul>
</div>
</div>
</nav>