Flexbox
¿Qué es Flexbox CSS?
Sección titulada «¿Qué es Flexbox CSS?»Flexbox CSS es un modelo de distribución unidimensional que organiza elementos en una fila o en una columna. Permite repartir el espacio disponible, alinear componentes y adaptar sus tamaños sin depender de posiciones o medidas rígidas.
El modelo se activa con display: flex o display: inline-flex sobre un elemento. Este pasa a ser el contenedor flexible, mientras que sus hijos directos se convierten en elementos flexibles. Las propiedades del contenedor controlan la dirección, la alineación y la posibilidad de crear varias líneas; las propiedades de los elementos determinan cómo crecen, se encogen o cambian de orden.
Flexbox trabaja con dos ejes. El eje principal sigue la dirección establecida por flex-direction, y el eje transversal lo cruza de forma perpendicular. Si la dirección es row, el eje principal suele ser horizontal; si es column, es vertical. Esta distinción permite entender qué eje controla cada propiedad de alineación.
Es un sistema adecuado para componentes y distribuciones en una dimensión: barras de navegación, grupos de botones, cabeceras, formularios, tarjetas o elementos centrados. Para estructuras que necesitan controlar filas y columnas a la vez, CSS Grid suele ser más apropiado.
Características de Flexbox CSS
Sección titulada «Características de Flexbox CSS»- Dirección del flujo:
flex-directionaceptarow,row-reverse,columnycolumn-reverse. La dirección también afecta al significado de eje principal y transversal. - Distribución en el eje principal:
justify-contentreparte el espacio libre con valores comoflex-start,center,space-betweenospace-evenly. - Alineación transversal:
align-itemsalinea todos los elementos de una línea.align-selfpermite modificar la alineación de un elemento concreto. - Salto de línea:
flex-wrap: wrappermite que los elementos pasen a nuevas líneas cuando no caben. Sin esta regla, el valor inicialnowrapintenta mantenerlos en una sola línea. - Separación uniforme:
gapestablece espacio entre elementos y entre líneas sin añadir márgenes exteriores al contenedor. - Crecimiento y contracción:
flex-growindica cómo se reparte el espacio sobrante yflex-shrinkcuánto puede reducirse cada elemento cuando falta espacio. - Tamaño base:
flex-basisestablece el tamaño inicial sobre el eje principal antes de distribuir el espacio. La abreviaturaflexcombina crecimiento, contracción y tamaño base. - Orden visual:
ordercambia la posición visual de un elemento, pero no modifica el orden lógico del documento. Por accesibilidad, no debe utilizarse para corregir una estructura de contenido incorrecta. - Varias líneas:
align-contentdistribuye las líneas completas sobre el eje transversal y solo tiene efecto cuando existen varias líneas y queda espacio libre. - Tamaños mínimos: los elementos flexibles pueden conservar un tamaño mínimo basado en su contenido.
min-width: 0omin-height: 0resulta útil cuando un hijo debe encogerse y su contenido provoca desbordamiento.
¿Por qué aprender Flexbox CSS?
Sección titulada «¿Por qué aprender Flexbox CSS?»Flexbox resuelve alineaciones frecuentes con pocas reglas. Permite centrar un elemento en ambos ejes, separar los extremos de una cabecera, mantener controles alineados o distribuir un grupo de tarjetas aunque sus contenidos tengan tamaños distintos.
Su flexibilidad reduce la necesidad de calcular anchos manualmente. Los elementos pueden ocupar el espacio sobrante, conservar un tamaño base y pasar a otra línea cuando el contenedor se estrecha. Esto facilita construir componentes responsive que reaccionan al espacio real disponible.
También mejora el mantenimiento del código. La relación entre el contenedor y sus hijos expresa directamente la intención del diseño: dirección, separación, alineación y reparto de espacio. No hace falta simular estas tareas con float, márgenes calculados o posicionamiento absoluto.
Comprender los ejes ayuda a evitar errores habituales. justify-content no significa siempre alineación horizontal, y align-items no significa siempre alineación vertical: ambos dependen de flex-direction. Esta idea es esencial para predecir el resultado antes de modificar valores por prueba y error.
Flexbox se complementa con el modelo de caja, las unidades relativas, las media queries y CSS Grid. Una interfaz puede usar Grid para la estructura general y Flexbox dentro de cada componente, sin que ambos sistemas compitan entre sí.
Ejemplo de Flexbox CSS
Sección titulada «Ejemplo de Flexbox CSS»Este ejemplo crea un grupo de tarjetas adaptable. Las tarjetas parten de un ancho de 16rem, pueden crecer para ocupar el espacio libre y saltan a otra línea cuando dejan de caber.
.lista-tarjetas { display: flex; flex-wrap: wrap; align-items: stretch; gap: 1rem;}
.tarjeta { display: flex; flex: 1 1 16rem; flex-direction: column; min-width: 0; padding: 1rem; border: 1px solid #cbd5e1; border-radius: 0.75rem;}
.tarjeta__contenido { flex-grow: 1;}
.tarjeta__acciones { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 0.5rem; margin-top: 1rem;}La clase .lista-tarjetas es el contenedor principal. flex-wrap: wrap permite formar nuevas filas y gap mantiene una separación constante. align-items: stretch, que coincide con el comportamiento inicial, hace que las tarjetas de una misma línea tengan la misma altura cuando no se les asigna otra altura.
La abreviatura flex: 1 1 16rem indica que cada tarjeta puede crecer, puede encogerse y parte de un tamaño base de 16rem. El resultado no fija un número concreto de columnas: el navegador crea las que caben según el ancho del contenedor.
Cada tarjeta también es un contenedor flexible con dirección vertical. flex-grow: 1 hace que el contenido central ocupe el espacio disponible y empuje las acciones hacia la parte inferior. Dentro de las acciones, justify-content: flex-end coloca los controles al final del eje principal, que en este caso es horizontal.
Artículos en Flexbox
Puedes consultar todos los artículos de Flexbox que tenemos en Línea de Código.