0%
Inicio / css / Flexbox

Flexbox

30 min
Intermedio

El problema que resuelve Flexbox

Con lo que viste hasta ahora, centrar algo horizontalmente y verticalmente dentro de una caja, o repartir varios elementos en una fila con espacio parejo entre ellos, es sorprendentemente incómodo — requiere trucos con márgenes, o con posicionamiento absoluto y cálculos a mano.

Flexbox es un sistema de layout pensado exactamente para eso: acomodar elementos en una fila o una columna, controlando cómo se distribuyen y se alinean. Es, con diferencia, la herramienta más usada hoy para maquetar una página.

Se activa con una sola propiedad, en el contenedor:

.contenedor {
    display: flex;
}

Apenas hacés esto, todos los hijos directos de .contenedor se acomodan automáticamente en una fila, uno al lado del otro — sin que hayas tocado nada más.

Probá vos: activar flex

Las tres cajas de abajo hoy están apiladas una debajo de otra (son <div>, block por defecto). Activá flexbox en .contenedor para que se acomoden en fila.

justify-content: distribuir en el eje principal

justify-content controla cómo se reparten los elementos a lo largo de la fila (el "eje principal" de un contenedor flex en fila):

  • flex-start (por defecto): todos juntos al principio.
  • center: todos juntos, centrados.
  • flex-end: todos juntos al final.
  • space-between: el primero pegado al principio, el último pegado al final, y el resto del espacio repartido parejo entre medio.
  • space-around: espacio parejo alrededor de cada elemento.
.contenedor {
    display: flex;
    justify-content: space-between;
}

Predecir justify-content

Responde estas preguntas para verificar tu comprensión.

Pregunta 1

Querés un menú de navegación donde el logo quede pegado a la izquierda y los tres links de navegación pegados a la derecha, con todo el espacio del medio vacío. ¿Qué justify-content corresponde?

align-items: alinear en el eje transversal

Mientras justify-content reparte a lo largo de la fila, align-items controla la alineación en la otra dirección (vertical, en un contenedor flex en fila) — muy útil para centrar cosas verticalmente, algo que sin flexbox era realmente incómodo de lograr.

  • stretch (por defecto): todos los elementos se estiran para ocupar toda la altura del contenedor.
  • flex-start: todos arriba.
  • center: todos centrados verticalmente.
  • flex-end: todos abajo.
.contenedor {
    display: flex;
    align-items: center;
    height: 100px;
}

Con justify-content: center y align-items: center juntos, se centra cualquier cosa horizontal Y verticalmente — el problema clásico que sin flexbox necesitaba trucos.

Probá vos: centrar de las dos formas

Centrá el contenido de .contenedor horizontal y verticalmente al mismo tiempo.

flex-direction: cambiar de fila a columna

Por defecto, un contenedor flex acomoda en fila (row). Con flex-direction: column, lo mismo se acomoda en columna — y justify-content/align-items se comportan igual, solo que ahora "a lo largo" es verticalmente y "transversal" es horizontalmente.

.contenedor {
    display: flex;
    flex-direction: column;
}

Esto es útil, por ejemplo, para armar una tarjeta donde el título, la imagen y el texto se apilan verticalmente pero siguen queriendo centrado horizontal.

Predecir el layout

Responde estas preguntas para verificar tu comprensión.

Pregunta 1

.contenedor {
    display: flex;
    flex-direction: column;
    align-items: center;
}
Tres elementos adentro de este contenedor. ¿Cómo se acomodan?

Cargando...