Hoy · Hoja de ruta
- 1. Aprende: Cómo se razona un layout de Flexbox en lugar de buscar la receta en internet.
- 2. Haz: Construye tres componentes distintos y justifica cada decisión.
- 3. Comprueba: Sabes decir para cada uno cuál es el eje principal.
Antes de empezar · 5 minutos, sin apuntes
- ¿Cómo se determinan el eje principal y el eje cruzado?
- ¿Qué diferencia hay entre
justify-contentyalign-items? - Una navegación desborda: ¿qué revisarías antes de reducir la fuente?
El método, en tres preguntas
Cuando te enfrentes a un componente, no busques la propiedad: contesta esto.
- ¿Qué elementos tengo que colocar en una misma línea?
- ¿En qué dirección van: fila o columna? Ese es el eje principal
- ¿Qué hago con el espacio que sobra en ese eje, y cómo alineo en el otro?
Con eso, justify-content y align-items dejan de ser prueba y error.
Caso 1 · Una botonera
<div class="acciones">
<button type="submit">Guardar</button>
<button type="button">Cancelar</button>
</div>
- ¿Qué coloco?
- Dos botones, uno al lado del otro.
- ¿Eje principal?
- Fila. Es el valor por defecto, así que no hace falta escribir
flex-direction. - ¿Y el espacio sobrante?
- Depende de lo que quiera: pegados a la izquierda es
flex-start; a la derecha, como en un formulario, esflex-end.
.acciones {
display: flex;
justify-content: flex-end;
gap: var(--space-sm);
}
Caso 2 · Una tarjeta horizontal
┌───────────────────────────────────┐
│ imagen │ título │
│ │ descripción │
│ │ precio botón │
└───────────────────────────────────┘
Aquí hay dos Flexbox anidados, y verlo es media solución:
- Uno exterior en fila: imagen a un lado, información al otro.
- Uno interior en columna dentro de la información: título, descripción y la línea del precio.
- Un tercero en fila para esa última línea, con el precio a la izquierda y el botón a la derecha.
.producto { display: flex; gap: var(--space-md); }
.producto__datos { display: flex; flex-direction: column; gap: var(--space-xs); }
.producto__pie { display: flex; justify-content: space-between; align-items: center; }
Anidar contenedores es normal y no es un síntoma de nada malo. Cada uno resuelve una dimensión.
Caso 3 · Centrar
El problema con más recetas copiadas de internet de toda la historia de CSS. Con Flexbox son dos líneas, pero conviene entenderlas:
.caja {
display: flex;
justify-content: center; /* centra en el eje principal */
align-items: center; /* centra en el transversal */
}
Centrar es simplemente centrar en los dos ejes a la vez. Si solo necesitas uno, solo escribes uno.
Reto 2 · Los tres centrados (10 min)
Tienes tres cajas, cada una con un cuadrado dentro. Consigue, sin position y sin márgenes fijos:
- El cuadrado centrado en horizontal, arriba del todo.
- El cuadrado centrado en vertical, pegado a la derecha.
- El cuadrado centrado en los dos ejes.
Ver respuesta del Reto 2
Con display: flex y dirección por defecto (fila):
1 · justify-content: center; y nada más: el eje principal es el horizontal, y sin align-items el hijo se queda arriba si tiene altura propia.
2 · justify-content: flex-end; align-items: center;
3 · justify-content: center; align-items: center;
Y la comprobación de que lo has entendido: con flex-direction: column, los tres se resuelven intercambiando las dos propiedades.
Microrevisión · diez minutos, sin nota
Intercambia con un compañero únicamente una sección que ya hayas maquetado. Encuentra una decisión de layout que no puedas justificar y descríbela así:
- Qué intenta resolver: tamaño, espacio, distribución o estado.
- Qué regla actúa: compruébala en DevTools.
- Qué duda queda: por qué Flexbox, Grid o el flujo normal podrían encajar mejor.
El autor decide si cambia el código o conserva la decisión y la justifica. No se valora la coincidencia de criterio estético entre ambas partes.
Tarea 9 · Flexbox Challenge
Construye estos tres componentes usando solo Flexbox, y aplícalos a tu proyecto donde encajen:
A · La barra de cabecera, con el nombre del sitio a la izquierda, la navegación a la derecha y todo alineado verticalmente.
B · La tarjeta horizontal del caso 2, que debe seguir funcionando cuando la descripción sea el doble de larga.
C · Una línea de metadatos —fecha, autor, categoría— separada por gap, que salte de línea con elegancia cuando no quepa.
Para cada uno responde por escrito:
| Componente | Eje principal | Por qué ese justify-content |
Por qué ese align-items |
¿Necesitó flex-wrap? |
|---|---|---|---|---|
| A | ||||
| B | ||||
| C |
Esa tabla es la tarea. El CSS lo puede escribir cualquiera copiando; la tabla solo la puede rellenar quien ha entendido los ejes.
Checkpoint · fin de la sesión 9 y de la semana 3
- Sabes identificar el eje principal de cualquier Flexbox.
- Sabes que
justify-contentyalign-itemsse intercambian al cambiar la dirección. - Usas
gapen lugar de márgenes para separar. - Tu navegación funciona a 360 px sin desbordar.
- No hay ningún valor en píxeles colocando elementos a mano.
Antes de cerrar · 2 minutos, sin mirar
- Enuncia las tres preguntas con las que se razona un Flexbox.
- ¿Está mal anidar un Flexbox dentro de otro?
- ¿Qué hace
margin-left: autoen un hijo de un Flexbox?
Ver respuestas
1 · Qué elementos van en la misma línea, en qué dirección —ese es el eje principal— y qué hago con el espacio sobrante y con la alineación en el otro eje.
2 · No. Es lo normal: cada contenedor resuelve una dimensión, y una tarjeta suele necesitar dos o tres.
3 · Absorbe todo el espacio sobrante por ese lado, empujando ese elemento y los siguientes al final del eje.
Microprueba semanal 3 · 5–10 minutos
Individual, sin IA y sin apuntes.
- Elige cuáles resolverías con Flexbox: navegación, botonera, tabla de datos y tarjeta horizontal.
- Escribe únicamente el CSS imprescindible para una botonera que pueda saltar de línea.
- Predice qué cambia al pasar de
rowacolumn.