4. Navegación y menús
Veremos la estructura semántica de una barra de navegación con <header>, <nav> y una lista de enlaces; el layout con Flexbox para distribuir logo y links; el estado activo con .active o aria-current; y un ajuste responsivo rápido con wrap o cambio a columna.
4.1 Barra de navegación básica
Estructura semántica
- Usa <nav aria-label="principal"> para el bloque de navegación.
- Lista de enlaces con <ul> <li> <a> para semántica y accesibilidad.
- Logo/brand como <a> al inicio para volver a inicio.
Navbar con logo a la izquierda, links a la derecha; :hover y foco accesible:
<header>
<nav aria-label="principal" class="navbar">
<a href="/" class="brand">...logo...</a>
<ul>
<li><a href="/" aria-current="page" class="active">Inicio</a></li>
...
</ul>
</nav>
</header>
/* Layout con Flexbox y estado activo */
.navbar { display:flex; justify-content:space-between; align-items:center; }
.navbar a.active, .navbar a[aria-current="page"] { background: var(--primary); }
Responsivo rápido
- Permite flex-wrap en los links para que “bajen de línea”.
- En móviles, cambia a columna y haz que los links ocupen todo el ancho para fácil toque.
- Alternativa: mostrar/ocultar un menú colapsable (fuera del alcance de esta demo rápida).
Micropráctica
Objetivo: convertir una lista vertical en una navbar horizontal con espaciado uniforme.
Antes: lista vertical
Después: navbar horizontal
/* Paso 1: convertir <ul> vertical a fila */
ul { display: flex; gap: 12px; justify-content: space-evenly; flex-wrap: wrap; }
/* Paso 2: estilizar enlaces */
ul a {
display: inline-block; padding: .6rem .8rem; border-radius: 10px;
text-decoration: none; color: #fff; border: 1px solid rgba(255,255,255,.15);
transition: var(--transition);
}
ul a:hover { background: var(--accent); color: var(--primary); }
Checklist de comprensión
- ¿Mi navbar usa <nav> y lista de enlaces para semántica y accesibilidad?
- ¿Distribuí logo y enlaces con Flexbox de forma clara?
- ¿Expongo estado activo con .active o aria-current="page"?
- ¿Mi navbar se adapta: wrap o columna en pantallas pequeñas?
- ¿Aseguré hover y focus visibles para teclado y accesibilidad?