Navbar Responsive: Del menú hamburguesa al off-canvas
Domina la creación de navegaciones profesionales responsive con menú hamburguesa y panel off-canvas usando Tailwind, Bootstrap, Flexbox y Grid.
El navbar responsive es el componente más crítico de cualquier sitio web moderno.
Aprenderás a crear menús que colapsan a hamburguesa en móvil y se expanden en off-canvas o dropdown.
Verás 4 implementaciones: con frameworks (Tailwind, Bootstrap) y CSS vanilla (Flexbox, Grid), todas con JavaScript mínimo.
- Componentes esenciales y estructura HTML.
- Un navbar responsive típico tiene: contenedor principal, logo/brand, botón hamburguesa (visible solo en móvil), y menú de navegación (que colapsa en móvil).
- En desktop, el menú se muestra horizontal. En móvil, se oculta y el botón hamburguesa lo despliega vertical u off-canvas.
- La estructura HTML debe ser accesible: usar <nav>, <button> para el toggle con aria-expanded y aria-controls, y <ul>/<li> para los links.
- 3 formas de mostrar el menú en móvil.
Anatomía de un navbar responsive
Componentes esenciales y estructura HTML.
Un navbar responsive típico tiene: contenedor principal, logo/brand, botón hamburguesa (visible solo en móvil), y menú de navegación (que colapsa en móvil).
En desktop, el menú se muestra horizontal. En móvil, se oculta y el botón hamburguesa lo despliega vertical u off-canvas.
La estructura HTML debe ser accesible: usar <nav>, <button> para el toggle con aria-expanded y aria-controls, y <ul>/<li> para los links.
Patrones de navegación responsive
3 formas de mostrar el menú en móvil.
Toggle dropdown: el menú se expande hacia abajo empujando el contenido. Simple pero puede ser molesto si el menú es largo.
Off-canvas lateral: el menú se desliza desde un lado (overlay o push). Profesional, usado en apps y sitios modernos.
Full-screen overlay: el menú cubre toda la pantalla. Dramático, ideal para portfolios y landing pages.
En esta lección nos centraremos en toggle dropdown y off-canvas lateral, los más usados en producción.
- Toggle dropdown: max-height + overflow + transition para animación suave.
- Off-canvas: position fixed + transform translateX para deslizar desde el lateral.
- Overlay oscuro: pseudo-elemento ::before o div separado con backdrop.
- Accesibilidad: aria-expanded, focus-trap, cerrar con ESC.
- Performance: usar transform y opacity para animaciones (GPU accelerated).
El icono hamburguesa
Cómo crear el icono de 3 líneas animado.
El icono hamburguesa clásico son 3 líneas horizontales que se animan a X al abrir el menú.
Puedes usar un SVG, un icono de fuente (Font Awesome, Bootstrap Icons), o crearlo con CSS puro usando ::before, ::after y el elemento mismo.
La animación CSS puro es más ligera: rotas las líneas superior e inferior 45° y -45°, y ocultas la del medio con opacity: 0.
Método 1: Tailwind CSS
Utility classes con toggle JavaScript mínimo.
Tailwind usa breakpoints (md:, lg:) para mostrar/ocultar elementos según el viewport.
El menú está oculto por defecto (hidden) y se muestra con JavaScript añadiendo/quitando clases.
En desktop (md: y superiores), el menú se muestra siempre (md:flex) ignorando el estado del toggle.
- hidden md:flex: oculto en móvil, visible en desktop.
- flex-col md:flex-row: vertical en móvil, horizontal en desktop.
- fixed inset-y-0 para off-canvas de altura completa.
- transform -translate-x-full para ocultar fuera de pantalla.
- transition-transform para animación suave.
- backdrop-blur-sm para overlay moderno.
Método 2: Bootstrap
Componente navbar con JavaScript incluido.
Bootstrap incluye el componente .navbar con todo el comportamiento responsive built-in.
Solo necesitas la estructura HTML correcta con clases .navbar-toggler y .navbar-collapse.
El JavaScript de Bootstrap maneja automáticamente el toggle, animaciones y accesibilidad.
- .navbar-expand-lg: colapsa en pantallas menores a lg (992px).
- .navbar-toggler automáticamente conectado con data-bs-toggle y data-bs-target.
- .collapse .navbar-collapse: animación de altura incluida.
- .navbar-nav con .nav-link: estilos predefinidos.
- bg-light, navbar-light: temas de color predefinidos.
- No necesitas escribir JavaScript custom.
Método 3: Flexbox
CSS vanilla con media queries.
Flexbox organiza el navbar: logo a la izquierda (flex-start), menú a la derecha (flex-end o margin-left: auto).
En móvil, cambias el contenedor a flex-direction: column y ocultas el menú con max-height: 0 + overflow: hidden.
Al activar el toggle, animas max-height a un valor grande (ej: 500px) para revelar el menú.
- justify-content: space-between para separar logo y menú.
- margin-left: auto en el menú para empujarlo a la derecha.
- Media query @media (max-width: 768px) para móvil.
- max-height + transition para animación suave sin JavaScript pesado.
- position: fixed para off-canvas con transform.
- z-index alto para overlay sobre el contenido.
Método 4: CSS Grid
Grid para navbars con layouts complejos.
CSS Grid brilla cuando tu navbar tiene múltiples secciones: logo, menú principal, menú secundario, botones de acción.
Puedes usar grid-template-columns: auto 1fr auto para: logo fijo, menú expandible, botones fijos.
En móvil, cambias a grid-template-rows para layout vertical o usas off-canvas como con Flexbox.
- grid-template-columns para control preciso del ancho de cada sección.
- grid-template-areas para layouts con nombres semánticos.
- place-items: center para centrar verticalmente los elementos.
- gap para separación sin margin manual.
- Combinable con Flexbox: Grid para el navbar, Flex para el menú interno.
- Ideal para navbars con buscador, iconos, avatars, etc.
¿Cuándo usar cada método?
Guía de decisión según necesidades.
Tips profesionales
Detalles que elevan tu navbar al siguiente nivel.
- position: sticky + top: 0 para navbar que se mantiene visible al scroll.
- backdrop-filter: blur(10px) + background semi-transparente para efecto glassmorphism moderno.
- box-shadow que aparece solo al hacer scroll para feedback visual.
- Animación de scroll suave con scroll-behavior: smooth en html.
- Active state en el link de la página actual con aria-current='page'.
- Focus visible para navegación con teclado (outline con :focus-visible).