edubun
Español

Flexbox

Antes de flexbox, centrar una caja en vertical requería trucos. Con display: flex bastan dos declaraciones: justify-content y align-items.

Una fila o una columna

Flexbox, el módulo CSS Flexible Box Layout, coloca un grupo de cajas a lo largo de una línea. Pon display: flex en un contenedor y sus hijos directos, los elementos flex, se alinean uno al lado del otro en lugar de apilarse. Esa sola declaración basta para una barra de menú, una fila de botones o una tarjeta cuyo pie debe quedar pegado abajo. Flexbox trabaja en una dimensión a la vez: o una fila o una columna. Cuando necesitas filas y columnas a la vez, grid, de la unidad siguiente, suele ser la mejor herramienta.

En una fila, el eje principal va de izquierda a derecha (en español) y el eje transversal, de arriba abajo. justify-content actúa sobre el eje principal y align-items sobre el eje transversal.

Dos ejes

En flexbox todo se describe en función de dos ejes. El eje principal es la dirección en la que fluyen los elementos, y lo fija flex-direction: row (el valor predeterminado) o column. El eje transversal forma un ángulo recto con él. justify-content reparte los elementos a lo largo del eje principal: flex-start, center, flex-end, space-between (el primer y el último elemento en los bordes, con espacios iguales entre ellos) o space-around. align-items los coloca en el eje transversal: stretch (el valor predeterminado, todos tan altos como el más alto), flex-start, center o flex-end. Así, una caja queda centrada en las dos direcciones con justify-content: center y align-items: center.

.bar {
  display: flex;
  justify-content: space-between;  /* logo left, menu right */
  align-items: center;             /* vertically centred */
  gap: 16px;                       /* space between items */
}
.cards { display: flex; flex-wrap: wrap; gap: 12px; }
.card  { flex: 1 1 200px; }        /* grow, shrink, start at 200px */
Una barra de encabezado y una fila de tarjetas que pasa a líneas nuevas.

Espacios y salto de línea

gap pone espacio entre los elementos sin agregar nada en los bordes exteriores, que es lo que normalmente quieres y lo que con márgenes resulta incómodo. Por defecto, los elementos flex se quedan en una sola línea y se encogen para caber, aunque eso los aplaste. flex-wrap: wrap les permite pasar a una línea nueva cuando no hay espacio suficiente, así que una fila de cuatro tarjetas en una laptop puede convertirse en dos filas de dos en una tableta y en una sola columna en un celular, sin ninguna media query.

Cómo crecen y se encogen los elementos

La forma abreviada flex de un elemento acepta tres valores. flex-grow dice cuánto del espacio sobrante toma el elemento en comparación con sus hermanos; flex-shrink dice con qué facilidad se encoge cuando falta espacio; flex-basis es su tamaño inicial antes de crecer o encogerse. flex: 1 1 200px significa empezar en 200 píxeles y luego repartir el espacio extra por igual con los demás elementos que también tengan un grow de 1. flex: 1 solo es la forma corta de 1 1 0%, que hace que todos los elementos tengan el mismo ancho. Dale a un elemento flex-grow: 2 y a los demás 1, y tomará el doble que ellos del espacio sobrante.

Orden visual y orden real

Flexbox puede cambiar el orden en que aparecen los elementos, con flex-direction: row-reverse o con la propiedad order, sin tocar el HTML. Úsalo con cuidado. El foco del teclado y los lectores de pantalla siguen el orden del HTML, así que si la pantalla muestra Contact antes que Home pero Tab pasa primero por Home, quien usa el teclado se pierde. Cuando el orden importa para el significado, cámbialo en el HTML.

contenedor flexEl padre con display: flex
elemento flexUn hijo directo de un contenedor flex
eje principalDirección del flujo; la fija flex-direction
justify-contentReparte los elementos a lo largo del eje principal
align-itemsColoca los elementos en el eje transversal
gapEspacio entre los elementos, no en los bordes
flex: 1 1 200pxgrow 1, shrink 1, basis 200px
  1. ¿Qué declaración convierte un elemento en un contenedor flex?
    • display: flex
    • flex: 1
    • position: flex
  2. En una fila, ¿qué propiedad reparte los elementos en horizontal?
    • justify-content
    • align-items
    • flex-wrap
  3. Con flex-direction: column, ¿qué controla justify-content?
    • El reparto vertical
    • El reparto horizontal
    • El tamaño de letra
  4. ¿Qué valor pone el primer y el último elemento en los bordes, con espacios iguales entre ellos?
    • space-between
    • space-around
    • center
  5. ¿Cuál es el valor predeterminado de align-items?
    • stretch
    • center
    • flex-start
  6. Cuatro elementos tienen flex: 1 en un contenedor de 400px sin gap. ¿Cuánto mide cada uno?
  7. Tres elementos con flex-basis 0 se reparten 400px. Uno tiene flex-grow 2 y los otros 1. ¿Cuánto mide el grande?
  8. ¿Qué permite flex-wrap: wrap?
    • Que los elementos pasen a una línea nueva cuando no hay espacio
    • Que el texto salte de línea dentro de los elementos
    • Que los elementos se encimen
  9. La propiedad order pone Contact primero en la pantalla, pero es el último en el HTML. ¿Qué sigue pasando por él al final?
    • El foco del teclado y los lectores de pantalla
    • El puntero del mouse
    • Nada
  10. ¿En cuántas dimensiones a la vez maqueta flexbox?
Ideas clave
  • display: flex alinea los hijos directos a lo largo del eje principal.
  • justify-content en el eje principal, align-items en el eje transversal, gap entre ellos.
  • flex: grow shrink basis; flex-wrap: wrap para filas que se reacomodan; mantén el orden visual igual al orden del HTML.
Fuentes de este curso (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

Fecha de consulta: 2026-10-17