CSS: Flexbox

CSS
CSS
Actualizado: 30/06/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

Flexbox: Sistema de diseño flexible en CSS

Flexbox (Flexible Box Layout) es uno de los sistemas de diseño más importantes en CSS moderno. Este módulo de especificación CSS proporciona una forma eficiente de organizar, distribuir y alinear elementos dentro de un contenedor, incluso cuando su tamaño es desconocido o dinámico.

La flexibilidad que ofrece Flexbox ha revolucionado la manera en que los desarrolladores abordan el diseño web. Antes de su llegada, crear layouts complejos requería técnicas complicadas con floats, positioning o display table. Flexbox simplifica estas tareas y ofrece un control preciso sobre la disposición de los elementos.

Conceptos fundamentales

El sistema Flexbox se basa en dos componentes principales: el contenedor flex (flex container) y los elementos flex (flex items). El contenedor es el elemento padre que define el contexto flexible, mientras que los elementos flex son sus hijos directos.

.container {
  display: flex;
}

Al aplicar display: flex a un elemento, este se convierte automáticamente en un contenedor flex, y todos sus hijos directos se transforman en elementos flex. Esta transformación activa el comportamiento flexible y permite utilizar todas las propiedades específicas de Flexbox.

Ejes y direcciones

Flexbox opera sobre dos ejes principales: el eje principal (main axis) y el eje transversal (cross axis). Por defecto, el eje principal es horizontal (de izquierda a derecha) y el eje transversal es vertical (de arriba a abajo).

La propiedad flex-direction controla la dirección del eje principal:

.container {
  display: flex;
  flex-direction: row; /* Horizontal, valor por defecto */
}

.container-column {
  display: flex;
  flex-direction: column; /* Vertical */
}

También existen las variantes row-reverse y column-reverse que invierten el orden de los elementos:

.container-reverse {
  display: flex;
  flex-direction: row-reverse; /* De derecha a izquierda */
}

Distribución y alineación

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Una de las ventajas principales de Flexbox es su capacidad para distribuir y alinear elementos de manera intuitiva. La propiedad justify-content controla la alineación a lo largo del eje principal:

.container {
  display: flex;
  justify-content: center; /* Centra los elementos */
}

.container-space {
  display: flex;
  justify-content: space-between; /* Distribuye con espacio entre elementos */
}

Los valores más utilizados incluyen:

  • flex-start: Alinea al inicio del contenedor
  • flex-end: Alinea al final del contenedor
  • center: Centra los elementos
  • space-between: Distribuye con espacio igual entre elementos
  • space-around: Distribuye con espacio igual alrededor de cada elemento

Para la alineación transversal, utilizamos align-items:

.container {
  display: flex;
  align-items: center; /* Centra verticalmente */
  min-height: 200px;
}

Flexibilidad de elementos

Los elementos flex pueden crecer, encogerse y establecer su tamaño base mediante las propiedades flex-grow, flex-shrink y flex-basis. La propiedad abreviada flex combina estas tres:

.item {
  flex: 1; /* Equivale a flex: 1 1 0% */
}

.item-fixed {
  flex: 0 0 200px; /* No crece, no se encoge, tamaño fijo 200px */
}

El primer valor (flex-grow) define cuánto puede crecer el elemento. Un valor de 1 significa que el elemento ocupará el espacio disponible proporcionalmente:

.item-grow {
  flex-grow: 2; /* Crecerá el doble que elementos con flex-grow: 1 */
}

Ajuste de líneas

Por defecto, los elementos flex intentan caber en una sola línea. La propiedad flex-wrap permite que los elementos se ajusten a nuevas líneas cuando sea necesario:

.container {
  display: flex;
  flex-wrap: wrap; /* Permite salto de línea */
}

.container-nowrap {
  display: flex;
  flex-wrap: nowrap; /* Valor por defecto, una sola línea */
}

La propiedad abreviada flex-flow combina flex-direction y flex-wrap:

.container {
  display: flex;
  flex-flow: row wrap; /* Dirección horizontal con ajuste de línea */
}

Alineación individual

Mientras que align-items afecta a todos los elementos flex, align-self permite controlar la alineación de elementos individuales:

.item-special {
  align-self: flex-end; /* Solo este elemento se alinea al final */
}

.item-center {
  align-self: center; /* Solo este elemento se centra */
}

Esta flexibilidad individual es especialmente útil cuando necesitamos que un elemento específico tenga un comportamiento diferente al resto del contenedor.

Espaciado y gaps

CSS moderno incluye la propiedad gap para controlar el espaciado entre elementos flex de manera más directa:

.container {
  display: flex;
  gap: 20px; /* Espacio de 20px entre elementos */
}

.container-custom {
  display: flex;
  row-gap: 15px; /* Espacio vertical */
  column-gap: 25px; /* Espacio horizontal */
}

Esta aproximación es más limpia y mantenible que utilizar márgenes en los elementos individuales, ya que no requiere selectores complejos para evitar márgenes no deseados en los bordes.

Completa CSS y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración