Introducción a Flexbox en CSS

Durante mucho tiempo, el diseño de interfaces en CSS dependió de métodos como el posicionamiento (static, absolute, relative), el comportamiento en línea o en bloque de los elementos, y el uso de float. Aunque estos enfoques funcionaban, resultaban complicados y poco eficientes para abordar los desafíos actuales, como la adaptación a diferentes tamaños de pantalla, desde escritorios hasta móviles.

Flexbox (también llamado Flexible Box) surge como una solución moderna, intuitiva y robusta para crear diseños de una sola dimensión, facilitando la alineación, distribución y ordenación de elementos en la web de forma dinámica y controlada.


Fundamentos de Flexbox

Para comenzar a utilizar Flexbox, debemos comprender algunos conceptos básicos:

  • Contenedor flex: Es el elemento padre al que se le asigna el valor display: flex. A partir de ahí, todos sus elementos hijos se comportarán como ítems flexibles.
  • Ítems flex: Son los elementos hijos directos del contenedor, que se alinearán automáticamente según el eje definido.
  • Eje principal: Por defecto, es horizontal (row). Controla la dirección en la que se distribuyen los ítems.
  • Eje cruzado (secundario): Es perpendicular al eje principal. Si el eje principal es horizontal, el eje cruzado será vertical, y viceversa.

Activar Flexbox

Para aplicar Flexbox a un contenedor, se utiliza la propiedad display con el valor flex o inline-flex:

cssCopiarEditar.container {
  display: flex;
}
ValorDescripción
flexCrea un contenedor de bloque flexible.
inline-flexCrea un contenedor en línea con comportamiento flexible.

Una vez aplicado, los elementos se alinearán en línea, adaptándose automáticamente al espacio disponible.


Cambiar la dirección con flex-direction

Esta propiedad determina cómo se distribuyen los elementos dentro del contenedor:

cssCopiarEditar.container {
  display: flex;
  flex-direction: row; /* Valor por defecto */
}
ValorDescripción
rowDirección horizontal de izquierda a derecha.
row-reverseDirección horizontal de derecha a izquierda.
columnDirección vertical de arriba hacia abajo.
column-reverseDirección vertical invertida.

Este control nos permite cambiar fácilmente el orden visual de los elementos sin modificar el HTML.


Contenedores flex en varias líneas: flex-wrap

Por defecto, Flexbox intenta colocar todos los ítems en una sola línea. Con flex-wrap, podemos permitir que se distribuyan en varias filas o columnas:

cssCopiarEditar.container {
  display: flex;
  flex-wrap: wrap;
}
ValorComportamiento
nowrapFuerza todos los ítems en una sola línea. (por defecto)
wrapPermite que los ítems se desborden en varias líneas.
wrap-reverseComo wrap, pero con orden inverso.

Atajo flex-flow

Para simplificar el uso de flex-direction y flex-wrap, puedes combinarlos con la propiedad flex-flow:

cssCopiarEditar.container {
  flex-flow: row wrap;
}

Espaciado entre ítems: gap, row-gap y column-gap

Con Flexbox, ya no es necesario usar márgenes para separar elementos. A partir de 2021, se puede utilizar la propiedad gap (y sus variantes) directamente en el contenedor:

cssCopiarEditar.container {
  display: flex;
  gap: 10px; /* Aplica 10px de separación entre todos los ítems */
}
PropiedadUso
gapDefine la separación general entre ítems.
row-gapEspacio entre filas (en diseños verticales).
column-gapEspacio entre columnas (en diseños horizontales).

También puedes usar dos valores en gap: el primero para filas y el segundo para columnas:

cssCopiarEditar.container {
  gap: 8px 16px; /* 8px entre filas, 16px entre columnas */
}

Ocultar elementos con display: none

Recuerda que Flexbox trabaja con elementos visibles. Para ocultar un ítem por completo (sin ocupar espacio), puedes usar:

cssCopiarEditar.item {
  display: none;
}

Esto lo excluye tanto visual como funcionalmente del diseño.


Valor especial display: contents

Si necesitas eliminar visualmente una capa intermedia que interrumpe la relación directa entre elementos en un diseño flex o grid, puedes usar:

cssCopiarEditar.middle {
  display: contents;
}

Esto mantiene el contenido visible pero ignora el elemento envolvente en el modelo de diseño.


Conclusión

Flexbox ofrece una manera moderna y eficiente de construir layouts en una sola dirección. Su facilidad para alinear, distribuir y ajustar elementos lo convierte en una herramienta esencial para cualquier desarrollador frontend. En próximos apartados exploraremos otras propiedades como justify-content, align-items, y el uso avanzado de order y flex-grow.