Maquetación con Flexbox

Un menú en fila, una tarjeta con la imagen a la izquierda y el texto a la derecha, un botón centrado en su caja: casi todo lo que colocas en una dirección (una fila o una columna) se resuelve con Flexbox.

display: flex en el contenedor; sus hijos directos se colocan en una dirección.

justify-content alinea en el eje principal; align-items, en el transversal.

gap separa; flex-wrap: wrap deja que salten de línea; flex: 1 reparte el espacio.

Una dirección → Flexbox. Dos direcciones → Grid.

  • Un menú en fila, una tarjeta con la imagen a la izquierda y el texto a la derecha, un botón centrado en su caja: casi todo lo que colocas en una dirección (una fila o una columna) se resuelve con Flexbox.
  • Flexbox se activa en el contenedor. Sus hijos directos pasan a ser elementos flexibles y se colocan en línea:
  • <nav> <ul class="menu"> <li><a href="#trabajos">Trabajos</a></li> <li><a href="#sobre-mi">Sobre mí</a></li> <li><a href="#contacto">Contacto</a></li> </ul> </nav>
  • .menu { display: flex; /* los <li> se colocan en fila */ gap: 1.5rem; /* espacio entre ellos */ list-style: none; padding: 0; }
  • Flexbox trabaja con dos ejes:

Introducción

Un menú en fila, una tarjeta con la imagen a la izquierda y el texto a la derecha, un botón centrado en su caja: casi todo lo que colocas en una dirección (una fila o una columna) se resuelve con Flexbox.

El contenedor y sus hijos

Flexbox se activa en el contenedor. Sus hijos directos pasan a ser elementos flexibles y se colocan en línea:

<nav> <ul class="menu"> <li><a href="#trabajos">Trabajos</a></li> <li><a href="#sobre-mi">Sobre mí</a></li> <li><a href="#contacto">Contacto</a></li> </ul> </nav>

.menu { display: flex; /* los <li> se colocan en fila */ gap: 1.5rem; /* espacio entre ellos */ list-style: none; padding: 0; }

Dos ejes

Flexbox trabaja con dos ejes:

Eje principal: la dirección en la que se colocan los elementos. Por defecto, horizontal (flex-direction: row). Eje transversal: el perpendicular.

flex-direction: row flex-direction: column eje principal → eje principal ↓ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │ A │ │ B │ │ C │ ↕ eje transversal │ A │ ↔ eje transversal └───┘ └───┘ └───┘ ├───┤ │ B │ └───┘

Alinear

Propiedad (en el contenedor)EjeValores habituales justify-contentPrincipalflex-start, center, flex-end, space-between, space-around align-itemsTransversalstretch (por defecto), flex-start, center, flex-end, baseline flex-wrap—nowrap (por defecto), wrap: si no caben, pasan a la línea siguiente gapAmbosEspacio entre elementos

Un clásico: centrar algo en su caja, en horizontal y vertical.

.portada { display: flex; justify-content: center; /* centro en el eje principal */ align-items: center; /* centro en el eje transversal */ min-height: 60vh; }

Otro clásico: logo a la izquierda y menú a la derecha.

Repartir el espacio: flex

En los hijos se decide cómo crecen o encogen:

.tarjeta { display: flex; gap: 1rem; } .tarjeta img { flex: 0 0 120px; /* no crece, no encoge, base de 120px */ } .tarjeta .texto { flex: 1; /* ocupa todo el espacio que sobra */ }

flex: 1 es la forma corta más usada: "reparte el espacio sobrante a partes iguales entre los que tengan flex: 1".

💡 Consejo. Las DevTools de Chrome y Firefox muestran un distintivo flex junto al contenedor en la pestaña Elementos. Al pulsarlo dibujan los ejes y el espacio de cada hijo. Úsalo siempre que algo no se coloque donde esperas.

Cuándo no usar Flexbox

Cuando necesitas controlar filas y columnas a la vez (una galería, una retícula de página) es más sencillo Grid, que verás en la página siguiente. Regla práctica:

Una dirección (barra, menú, fila de botones, tarjeta) → Flexbox. Dos direcciones (retícula, galería, composición de página) → Grid.

Errores frecuentes

Poner display: flex en el hijo en lugar de en el contenedor. Esperar que justify-content centre en vertical en una fila: en fila, la vertical es el eje transversal (align-items). Usar márgenes en cada elemento en lugar de gap.

CSS
81

Maquetación con Flexbox

Un menú en fila, una tarjeta con la imagen a la izquierda y el texto a la derecha, un botón centrado en su caja: casi todo lo que colocas en una dirección (una fila o una columna) se resuelve con Flexbox.

Código del tema: display: flex

📘 Teoría

Introducción

Un menú en fila, una tarjeta con la imagen a la izquierda y el texto a la derecha, un botón centrado en su caja: casi todo lo que colocas en una dirección (una fila o una columna) se resuelve con Flexbox.

El contenedor y sus hijos

Flexbox se activa en el contenedor. Sus hijos directos pasan a ser elementos flexibles y se colocan en línea:

<nav>
  <ul class="menu">
    <li><a href="#trabajos">Trabajos</a></li>
    <li><a href="#sobre-mi">Sobre mí</a></li>
    <li><a href="#contacto">Contacto</a></li>
  </ul>
</nav>
.menu {
  display: flex;        /* los <li> se colocan en fila */
  gap: 1.5rem;          /* espacio entre ellos */
  list-style: none;
  padding: 0;
}

Dos ejes

Flexbox trabaja con dos ejes:

  • Eje principal: la dirección en la que se colocan los elementos. Por defecto, horizontal (flex-direction: row).
  • Eje transversal: el perpendicular.
flex-direction: row                     flex-direction: column
eje principal →                         eje principal ↓
┌───┐ ┌───┐ ┌───┐                        ┌───┐
│ A │ │ B │ │ C │   ↕ eje transversal    │ A │   ↔ eje transversal
└───┘ └───┘ └───┘                        ├───┤
                                         │ B │
                                         └───┘

Alinear

Propiedad (en el contenedor)EjeValores habituales
justify-contentPrincipalflex-start, center, flex-end, space-between, space-around
align-itemsTransversalstretch (por defecto), flex-start, center, flex-end, baseline
flex-wrap—nowrap (por defecto), wrap: si no caben, pasan a la línea siguiente
gapAmbosEspacio entre elementos

Un clásico: centrar algo en su caja, en horizontal y vertical.

.portada {
  display: flex;
  justify-content: center;   /* centro en el eje principal */
  align-items: center;       /* centro en el eje transversal */
  min-height: 60vh;
}

Otro clásico: logo a la izquierda y menú a la derecha.

.cabecera {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

Repartir el espacio: flex

En los hijos se decide cómo crecen o encogen:

.tarjeta {
  display: flex;
  gap: 1rem;
}
.tarjeta img {
  flex: 0 0 120px;   /* no crece, no encoge, base de 120px */
}
.tarjeta .texto {
  flex: 1;           /* ocupa todo el espacio que sobra */
}

flex: 1 es la forma corta más usada: "reparte el espacio sobrante a partes iguales entre los que tengan flex: 1".

💡 Consejo. Las DevTools de Chrome y Firefox muestran un distintivo flex junto al contenedor en la pestaña Elementos. Al pulsarlo dibujan los ejes y el espacio de cada hijo. Úsalo siempre que algo no se coloque donde esperas.

Cuándo no usar Flexbox

1

Cuando necesitas controlar filas y columnas a la vez (una galería, una retícula de página) es más sencillo Grid, que verás en la página siguiente. Regla práctica:

2

  • Una dirección (barra, menú, fila de botones, tarjeta) → Flexbox.
  • Dos direcciones (retícula, galería, composición de página) → Grid.

Errores frecuentes

  • Poner display: flex en el hijo en lugar de en el contenedor.
  • Esperar que justify-content centre en vertical en una fila: en fila, la vertical es el eje transversal (align-items).
  • Usar márgenes en cada elemento en lugar de gap.

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros. culTest

La hice en febrero de 2026 para facilitar el aprendizaje de mis alumnos. La idea es aprender desarrollo web practicando y que el proyecto siga creciendo con nuevos temas, tests y retos.

Está inspirada en MDN, W3Schools, CodePen, Manz y muchos otros sitios de documentación sobre desarrollo web. Quería combinar teoría útil, ejemplos ejecutables, retos y el sistema de tests que ya tenía en culTest. culTest

Si te gustó, si no te gustó o si quieres escribirme, puedes hacerlo en cristianeslava@gmail.com