Entrada

Menú responsive y funcional solo con HTML y CSS

En el mundo del diseño web responsive, uno de los elementos más comunes y útiles son los menús. Aunque muchas veces frameworks como Bootstrap ofrecen soluciones rápidas y “eficientes” (entre comillas), es mucho más gratificante construir tú mismo el menú desde cero, y aquí lo vas a lograr utilizando solo HTML y CSS.

Otra ventaja de hacerlo desde cero, es la personalización. Al usar Bootstrap, es fácil caer en el mismo diseño que otros sitios web. Además, para que elcomponente Navbar de bootstrap funcione correctamente, es necesario agregar el JavaScript, y en mi caso, quiero hacer un menú sin nada de JavaScript.

Ahora, tengamos en cuenta que para lograr que nuestro menu sea reponsive y funcional usando solo HTML y CSS, existen varios métodos que vamos a ir conociendo y profundizando poco a poco.

Estructura del menú

Vamos a comenzar con una estructura mínima con un html muy básico:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Menú Responsive sin JavaScript</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <header>
    <div class="logo">Mi Sitio</div>
    <nav>
      <a href="#menu" class="menu-icon">&#9776;</a>
      <ul class="nav-list" id="menu">
        <a href="#!" class="menu-close"></a>
        <li><a href="#home">Inicio</a></li>
        <li><a href="#about">Sobre Nosotros</a></li>
        <li><a href="#services">Servicios</a></li>
        <li><a href="#contact">Contacto</a></li>
      </ul>
    </nav>
  </header>
</body>
</html>

Lo más relevante en el código anterior, es la vinculación con la hoja de estilo y la estructura del menú.

Estilos recomendados

Lo interesante viene a continuación en las reglas de estilos, usamos flexbox para alinear los elementos del menú, también algunas media queries y para darle funcionalidad, usamos la pseudoclase :target:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/* Reset */
* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
  text-decoration: none;
  color: white;
  font-family: Arial, sans-serif;
}

/* Contenedores flex, y bg */
header,
nav,
.nav-list {
  display: flex;
  background: #333;
}

/* Elementos ocultos para desktop */
.menu-icon,
.menu-close {
  display: none;
}

header {
  position: relative;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  height: 60px;
  padding: 0 20px;
}

.nav-list {
  list-style: none;
  gap: 25px;
}

@media(max-width: 768px) {
  /* Mobile */

  /* Mostrar el icono hamburguesa */
  .menu-icon {
    display: block;
  }

  .nav-list {
    /* Ocultamos el menu por defecto */
    display: none;
    /* ---------- */
    position: absolute;
    top: 60px;
    right: 0;
    width: 100%;
    flex-direction: column;
    align-items: center;
    padding: 10px;
  }

  /* Mostramos el menu y el botón para cerrarlo */
  #menu:target,
  #menu:target .menu-close {
    display: flex;
  }

  .menu-close {
    align-self: flex-start;
  }
}
Esta entrada está licenciada bajo CC BY 4.0 por el autor.