Desarrollo Frontend

CSS Flexbox: Arquitectura del Layout Flexible

Cómo distribuir espacio, alinear elementos y crear interfaces responsive sin hacks

Flexbox es el estándar moderno para organizar interfaces web. En esta guía completa vas a entender cómo funciona el sistema de ejes, cómo el navegador calcula el espacio disponible y cómo aplicar Flexbox para resolver layouts reales como navbars, tarjetas, grillas flexibles y estructuras responsive con menos CSS y más control.

Representación visual de ejes principales y transversales organizando elementos con CSS Flexbox
Flexbox permite al navegador distribuir y alinear elementos de forma inteligente según el espacio disponible.
1

Flexbox: qué es y para qué se usa

Flexbox es un sistema de layout unidimensional diseñado para organizar elementos en fila o columna de forma flexible. Permite alinear, distribuir espacio y adaptar el contenido dinámicamente sin cálculos manuales, siendo ideal para interfaces modernas y diseño responsive.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Contenedor que luego se convertirá en flex -->
<div class="contenedor">
  <!-- Cada elemento interno será un flex item -->
  <div class="item">Elemento 1</div>
  <div class="item">Elemento 2</div>
  <div class="item">Elemento 3</div>
</div>
Distribución flexible de elementos en una sola dimensión usando Flexbox
Flexbox organiza elementos en fila o columna de forma inteligente y adaptable.
2

Contenedor flex y elementos hijos

Flexbox funciona a partir de una relación clara entre un contenedor y sus hijos directos. El contenedor define el contexto flex y solo los elementos hijos inmediatos responden a las propiedades de Flexbox.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor padre que define el contexto Flexbox */
.contenedor {
  /* Activa el sistema Flexbox */
  display: flex;
}

/* Solo los hijos directos de .contenedor se convierten en flex items */
/* Los elementos anidados más profundo no heredan el comportamiento flex */
Relación entre contenedor flex y elementos hijos
Las propiedades flex no se heredan a nietos o elementos anidados.
3

Estructura HTML base para Flexbox

Flexbox no modifica el HTML, pero su estructura es clave. Cualquier etiqueta puede convertirse en contenedor flex, manteniendo una semántica clara y accesible.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Navegación que será distribuida con Flexbox -->
<nav class="menu">
  <a href="#">Inicio</a>
  <a href="#">Servicios</a>
  <a href="#">Contacto</a>
</nav>
Estructura HTML preparada para aplicar Flexbox
Flexbox actúa sobre la presentación, no sobre la estructura HTML.
4

Display flex: el disparador del sistema

La propiedad `display: flex` activa Flexbox. Desde ese momento, los hijos se alinean automáticamente en una fila y pasan a comportarse como elementos flexibles.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor que iniciará el contexto Flexbox */
.menu {
  /* Activa el sistema Flexbox */
  display: flex;
}

/* A partir de este momento, los hijos directos se convierten en flex items */
/* Sin display: flex, ninguna propiedad flex tiene efecto */
Activación del sistema Flexbox con display flex
Sin display flex, ninguna propiedad flex tiene efecto.
5

Los dos ejes de Flexbox

Flexbox trabaja con dos ejes: el eje principal, que define la dirección del flujo, y el eje secundario, que es perpendicular. Todas las alineaciones se calculan en función de estos ejes.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Los elementos se distribuyen según el eje principal -->
<div class="contenedor">
  <div class="item">A</div>
  <div class="item">B</div>
</div>
Representación del eje principal y eje transversal en Flexbox
Al cambiar la dirección, los ejes rotan automáticamente.
6

Flex-direction: control del flujo

La propiedad `flex-direction` define si los elementos se distribuyen en fila o columna, y también permite invertir el orden visual sin modificar el HTML.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor que organiza el flujo de los elementos */
.contenedor {
  /* Activa el sistema Flexbox */
  display: flex;

  /* Define la dirección del eje principal */
  /* row: fila (por defecto) */
  /* column: columna */
  /* row-reverse / column-reverse: invierten el orden visual */
  flex-direction: row;
}
Comparación visual de las direcciones posibles en Flexbox
Flex-direction redefine completamente el comportamiento del layout.
7

Flex-wrap: permitir múltiples líneas

Por defecto, Flexbox intenta mantener todos los elementos en una sola línea. Con `flex-wrap` podemos permitir que los ítems salten a nuevas filas o columnas cuando el espacio disponible no alcanza, logrando layouts adaptables y responsive.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Galería flexible que puede romper en varias filas -->
<div class="galeria">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>
Elementos flex pasando a una nueva línea al reducir el espacio
Flex-wrap es clave para layouts fluidos y responsivos.
8

Flex-wrap: control del desbordamiento

La propiedad `flex-wrap` define si los elementos permanecen en una sola línea o pueden distribuirse en múltiples líneas dentro del contenedor.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor tipo galería */
.galeria {
  /* Activa el sistema Flexbox */
  display: flex;

  /* Controla si los ítems pueden pasar a otra línea */
  /* nowrap: fuerza una sola línea (valor por defecto) */
  /* wrap: permite múltiples líneas */
  /* wrap-reverse: invierte el orden de las líneas */
  flex-wrap: wrap;
}
Uso de flex-wrap para permitir múltiples líneas
Sin flex-wrap, los ítems intentan encogerse para no romper la línea.
9

Flex-flow: dirección y envoltura juntas

Flex-flow es una propiedad abreviada que combina flex-direction y flex-wrap. Permite definir el comportamiento del layout en una sola línea, haciendo el código más claro y mantenible.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Contenedor con dirección y wrap definidos -->
<section class="listado">
  <article class="card">A</article>
  <article class="card">B</article>
  <article class="card">C</article>
</section>
Uso combinado de dirección y envoltura en Flexbox
Flex-flow reduce repetición y mejora la legibilidad del CSS.
10

Flex-flow: shorthand recomendado

Al usar `flex-flow` se define primero la dirección del eje principal y luego el comportamiento de envoltura. Es la forma recomendada en proyectos reales.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor que combina dirección y wrap */
.listado {
  /* Activa el sistema Flexbox */
  display: flex;

  /* flex-flow = flex-direction + flex-wrap */
  /* row wrap: fila con múltiples líneas */
  /* row nowrap: fila en una sola línea */
  /* column wrap: columna con múltiples bloques */
  /* column nowrap: columna sin saltos */
  flex-flow: row wrap;
}
Ejemplo práctico de flex-flow en un contenedor
Equivale a usar flex-direction y flex-wrap por separado.
11

Justify-content: alineación en el eje principal

Justify-content permite distribuir los elementos a lo largo del eje principal utilizando el espacio libre del contenedor. Es ideal para centrar, separar o empujar contenido horizontal o verticalmente.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Elementos alineados en el eje principal -->
<div class="barra">
  <div>Uno</div>
  <div>Dos</div>
  <div>Tres</div>
</div>
Alineación de elementos en el eje principal con justify-content
Justify-content actúa sobre el espacio sobrante.
12

Justify-content: distribución del espacio

Además de centrar o alinear al inicio y al final, justify-content permite repartir el espacio entre los elementos usando distintos criterios como space-between, space-around y space-evenly.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor tipo barra (navbar, header, footer, etc.) */
.barra {
  /* Activa el sistema Flexbox */
  display: flex;

  /* Distribuye los ítems sobre el eje principal */
  /* flex-start: todos al inicio (valor por defecto) */
  /* flex-end: todos al final */
  /* center: centrados */
  /* space-between: extremos a los bordes */
  /* space-around: espacio alrededor de cada ítem */
  /* space-evenly: espacio idéntico entre ítems y bordes */
  justify-content: space-between;
}
Comparación visual de los valores avanzados de justify-content
Cada valor distribuye el espacio de manera diferente.
13

Align-items: alineación en el eje transversal

La propiedad align-items controla cómo se alinean los elementos en el eje transversal de Flexbox. Si el flujo es en fila, alinea verticalmente; si es en columna, alinea horizontalmente.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Contenedor con elementos de distinta altura -->
<div class="contenedor">
  <div class="item alto">A</div>
  <div class="item">B</div>
  <div class="item">C</div>
</div>
Alineación de elementos en el eje transversal usando align-items
Align-items resuelve el clásico problema de centrar verticalmente.
14

Align-items: valores más usados

Align-items permite alinear los ítems al inicio, al final, al centro o estirarlos automáticamente para ocupar todo el tamaño del contenedor en el eje transversal.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor Flexbox */
.contenedor {
  /* Activa el sistema Flexbox */
  display: flex;

  /* Alineación sobre el eje transversal */
  /* stretch: estira los ítems (valor por defecto) */
  /* flex-start: alinea al inicio del eje transversal */
  /* center: centra los ítems */
  /* flex-end: alinea al final del eje transversal */
  /* baseline: alinea según la línea base del texto */
  align-items: center;
}
Comparación visual de los valores de align-items
La alineación depende siempre del eje transversal.
15

Align-content: alineación de múltiples líneas

Align-content se utiliza cuando hay varias líneas de elementos flex. Alinea el bloque completo de filas dentro del contenedor y solo funciona si flex-wrap está activo.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Contenedor con múltiples filas de elementos -->
<div class="muro">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
</div>
Alineación de varias filas usando align-content
Align-content no tiene efecto si hay una sola fila.
16

Align-content: cuándo y cómo usarlo

Align-content distribuye las filas completas dentro del contenedor. Es similar a justify-content, pero actúa sobre el eje transversal cuando hay múltiples líneas.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor con múltiples filas de elementos */
.muro {
  /* Activa el sistema Flexbox */
  display: flex;

  /* Permite que los ítems generen más de una línea */
  flex-wrap: wrap;

  /* Altura necesaria para que exista espacio transversal */
  height: 400px;

  /* Alinea el bloque completo de filas en el eje transversal */
  /* Solo tiene efecto si hay más de una línea */
  align-content: center;
}
Ejemplo práctico de align-content con múltiples filas
Funciona solo cuando hay más de una línea.
17

Gap: espaciado moderno entre elementos

La propiedad gap crea un espacio uniforme entre los elementos flex sin necesidad de usar márgenes individuales. Aplica solo entre ítems, no en los bordes externos.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Tarjetas separadas sin usar margin -->
<div class="tarjetas">
  <div class="card">Card 1</div>
  <div class="card">Card 2</div>
  <div class="card">Card 3</div>
</div>
Separación uniforme de elementos usando gap
Gap es más limpio y predecible que usar margins.
18

Gap: filas y columnas

Gap permite definir el espacio entre filas y columnas de manera uniforme. También puede dividirse en row-gap y column-gap para un control más preciso.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Contenedor que organiza tarjetas con Flexbox */
.tarjetas {
  /* Activa el sistema Flexbox */
  display: flex;

  /* Permite que las tarjetas pasen a una nueva fila si no entran */
  flex-wrap: wrap;

  /* Espacio uniforme entre filas y columnas */
  /* No agrega espacio en los bordes externos */
  gap: 24px;
}
Uso de gap para separar filas y columnas en Flexbox
Gap mejora la consistencia visual del layout.
19

Propiedades de los ítems Flex

Además de las propiedades del contenedor, cada ítem flex puede controlarse individualmente. Esto permite modificar su orden, tamaño y alineación sin afectar al resto del layout.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
<!-- Ítems flex con comportamiento individual -->
<div class="layout">
  <div class="item destacado">Principal</div>
  <div class="item">Secundario</div>
  <div class="item">Extra</div>
</div>
Propiedades aplicables a los ítems dentro de un contenedor Flexbox
Los ítems pueden comportarse distinto sin romper el layout general.
20

Order: cambiar el orden visual

La propiedad order permite reordenar visualmente los elementos sin modificar el HTML. Todos los ítems tienen order: 0 por defecto y los valores más bajos aparecen primero.

Copiar con comentariosCopiado
Copiar sin comentariosCopiado
/* Ítem destacado que se mostrará primero */
.destacado {
  /* Un valor menor aparece antes que los demás */
  order: -1;
}

/* Ítem secundario que se mostrará después */
.secundario {
  /* Valores mayores se colocan más al final */
  order: 2;
}
Reordenamiento visual de elementos con la propiedad order
Order cambia el orden visual, no el orden semántico del HTML.

Leccion Anterior

Capas de elementos web mostrando flujo, superposición y posicionamiento en CSS
Dominar display y position es entender cómo el navegador piensa el layout.

CSS Display y Position

En este módulo aprendés a pensar el layout como lo hace el navegador. Entenderás la diferencia entre block, inline e inline-block, cuándo usar display para controlar el flujo y cómo posicionar elementos con relative, absolute, fixed y sticky sin romper la estructura. Cerramos con z-index y stacking context para resolver superposiciones complejas de forma profesional.

Comenzar Lección

Leccion Actual

Representación visual de ejes principales y transversales organizando elementos con CSS Flexbox
Flexbox permite al navegador distribuir y alinear elementos de forma inteligente según el espacio disponible.

CSS Flexbox: Arquitectura del Layout Flexible

Flexbox es el estándar moderno para organizar interfaces web. En esta guía completa vas a entender cómo funciona el sistema de ejes, cómo el navegador calcula el espacio disponible y cómo aplicar Flexbox para resolver layouts reales como navbars, tarjetas, grillas flexibles y estructuras responsive con menos CSS y más control.

Comenzar Lección

Lecciones Siguiente

Esquema visual de un layout web bidimensional construido con CSS Grid
CSS Grid permite diseñar layouts completos controlando filas y columnas al mismo tiempo.

CSS Grid Maquetación

En esta lección aprenderás a usar CSS Grid para crear layouts complejos de forma clara y predecible, entendiendo filas, columnas, áreas y alineación para maquetar interfaces profesionales.

Comenzar Lección
¿Qué es Flexbox?Flexbox es un sistema de layout de CSS diseñado para distribuir, alinear y dimensionar elementos dentro de un contenedor en una sola dimensión (fila o columna). Permite crear interfaces flexibles y responsive incluso cuando el tamaño de los elementos es dinámico o desconocido.
¿Cuál es la diferencia principal entre Flexbox y CSS Grid?Flexbox es un modelo unidimensional: organiza elementos en una fila o en una columna. CSS Grid es bidimensional: controla filas y columnas al mismo tiempo. Flexbox es ideal para componentes y alineaciones; Grid es mejor para la estructura general de una página.
¿Cómo centro un elemento vertical y horizontalmente?Aplicá `display: flex` al contenedor y luego usá `justify-content: center` para el eje principal y `align-items: center` para el eje transversal. Es la forma más simple y robusta de centrar contenido en CSS moderno.
¿Para qué sirven los ejes Main y Cross?Flexbox trabaja con ejes abstractos. El Main Axis sigue la dirección definida por `flex-direction`, mientras que el Cross Axis es perpendicular. Todas las propiedades de alineación dependen de estos ejes, no de arriba, abajo, izquierda o derecha.
¿Qué propiedad define si los elementos van en fila o columna?La propiedad `flex-direction`. Sus valores principales son `row` (fila, por defecto), `column` (columna), y sus variantes inversas `row-reverse` y `column-reverse`.
¿Cómo hago que los elementos bajen a la siguiente línea si no caben?Usá `flex-wrap: wrap` en el contenedor. Por defecto Flexbox usa `nowrap`, lo que intenta forzar todos los elementos en una sola línea, incluso encogiéndolos.
¿Qué hace `justify-content: space-between`?Distribuye los elementos a lo largo del eje principal colocando el primero al inicio, el último al final y repartiendo el espacio sobrante de forma uniforme entre los elementos intermedios.
¿Por qué `align-items` no funciona en mi contenedor?Generalmente porque no hay espacio disponible en el eje transversal. Si el contenedor no tiene altura definida o su tamaño es igual al de su contenido, no hay espacio extra para alinear.
¿Qué es `flex-basis`?`flex-basis` define el tamaño base de un ítem antes de que Flexbox reparta el espacio disponible. Funciona como un `width` o `height` contextual, dependiendo de la dirección del layout.
¿Cuál es la diferencia entre `align-items` y `align-content`?`align-items` alinea los ítems dentro de una sola línea. `align-content` alinea el conjunto de líneas dentro del contenedor y solo tiene efecto cuando hay múltiples líneas con `flex-wrap` activo.
¿Qué hace `flex-grow: 1`?Permite que el ítem crezca para ocupar el espacio libre disponible. Si varios ítems tienen `flex-grow: 1`, el espacio se reparte equitativamente entre ellos.
¿Cómo evito que un ítem como un logo se aplaste?Asigná `flex-shrink: 0` al elemento. Esto evita que se reduzca de tamaño cuando el contenedor no tiene espacio suficiente.
¿Qué significa el shorthand `flex: 1`?Equivale a `flex: 1 1 0%`. El ítem puede crecer y encogerse libremente y su tamaño depende casi por completo del espacio disponible.
¿Puedo cambiar el orden visual de los elementos?Sí. Con la propiedad `order` podés modificar el orden visual de los ítems sin alterar el HTML. Los valores más bajos aparecen primero.
¿Es compatible Flexbox con navegadores antiguos?Flexbox tiene soporte completo en todos los navegadores modernos. Navegadores muy antiguos como Internet Explorer 10 y 11 tienen soporte parcial con bugs, pero hoy no representan un problema real en producción.
¿Cómo funciona `gap` en Flexbox?`gap` define el espacio entre los elementos flex, tanto en filas como en columnas. Es más limpio que usar márgenes porque no agrega espacio externo, solo separación interna.
¿Qué hace `align-self`?Permite que un ítem específico tenga una alineación distinta al resto, sobrescribiendo el valor de `align-items` definido en el contenedor.
¿Los float siguen siendo útiles con Flexbox?Para layout, no. Flexbox reemplaza completamente el uso de `float` para distribuir elementos. Hoy `float` se usa casi exclusivamente para envolver texto alrededor de imágenes.
¿Cómo hago un sticky footer con Flexbox?Aplicá `min-height: 100vh` y `display: flex; flex-direction: column` al contenedor principal, y asigná `flex: 1` al contenido. Esto empuja el footer al fondo de la pantalla.
¿Qué es `display: inline-flex`?`inline-flex` hace que el contenedor se comporte como un elemento en línea respecto a su entorno, pero internamente sigue funcionando como un contenedor flex.
¿Por qué las imágenes se deforman en Flexbox?Porque Flexbox intenta encoger los ítems para que todo encaje. Si no se controla, las imágenes pueden perder su proporción. Soluciones comunes son `flex-shrink: 0` y `object-fit: cover`.
¿Ocurre el colapso de márgenes en Flexbox?No. El colapso de márgenes verticales no ocurre dentro de contenedores Flex. Los márgenes simplemente se suman.
¿Cómo uso `margin: auto` en Flexbox?`margin: auto` absorbe el espacio disponible. Por ejemplo, `margin-left: auto` empuja un ítem completamente hacia la derecha, siendo ideal para separar grupos dentro de un navbar.
¿Flexbox afecta a elementos con position absolute?No directamente. Los elementos con `position: absolute` salen del flujo flex. Sin embargo, un contenedor flex con `position: relative` permite posicionarlos con precisión.
¿Cuál es el valor por defecto de `justify-content`?`flex-start`. Los elementos se agrupan al inicio del eje principal.
¿Cuál es el valor por defecto de `align-items`?`stretch`. Por eso los elementos suelen tener la misma altura dentro de una fila flex.
¿Qué pasa si uso `width` y `flex-basis` juntos?Si `flex-basis` tiene un valor definido, tiene prioridad. Si está en `auto`, entonces Flexbox toma el valor de `width`.
¿Flexbox es accesible para lectores de pantalla?Sí, pero hay que tener cuidado con `order`. Cambiar el orden visual no modifica el orden del DOM, y los lectores de pantalla siguen el orden HTML.
¿Cómo creo una grilla responsive sin media queries?Flexbox puede lograr algo básico usando `flex-wrap` y tamaños flexibles, pero para grillas complejas y consistentes CSS Grid es una mejor herramienta.
¿Qué significa `flex-flow: column wrap`?Distribuye los elementos en columnas verticales y, si se llena el alto del contenedor, crea nuevas columnas. Es útil para layouts tipo muro o galerías horizontales.

Información de cursos

Completá el formulario y recibí detalles sobre contenidos, fechas, niveles y promociones disponibles.

Completá el formulario para mantenerte informado. 👉