HTML/CSS lab

02 · Layout

Flexbox

flex organiza a los hijos directos de un contenedor en una sola dirección (fila o columna), resolviendo alineación y distribución de espacio sin floats ni trucos. Es el layout que más vas a usar en el día a día.

flex + flex-row/col: la dirección

flex activa el modelo. flex-row (default) alinea a los hijos en fila; flex-col los apila en columna.

1
2
3
1
2
3
<div class="flex flex-row gap-3">
  <div>1</div><div>2</div><div>3</div>
</div>

<div class="flex flex-col gap-3">
  <div>1</div><div>2</div><div>3</div>
</div>

justify-*: alineación en el eje principal

Con flex-row, el eje principal es horizontal. justify-between, justify-center, justify-around y justify-evenly controlan cómo se reparte el espacio sobrante entre los hijos.

LogoNav
<div class="flex justify-between">
  <div>Izquierda</div>
  <div>Derecha</div>
</div>

items-*: alineación en el eje cruzado

Con flex-row, el eje cruzado es vertical. items-center, items-start, items-end, items-stretch controlan la alineación vertical de los hijos entre sí.

bajo
alto
<div class="flex items-center gap-3 h-20 bg-stone-100">
  <div class="h-6">bajo</div>
  <div class="h-12">alto</div>
</div>

gap: espacio entre hijos, sin márgenes manuales

gap-{n} (o gap-x-*/gap-y-*) separa a los hijos flex sin necesitar margin en cada uno — y sin el problema de 'margen extra al principio o al final' que tiene poner margin a todos los hijos por igual.

A
B
C
<div class="flex gap-4">
  <div>A</div><div>B</div><div>C</div>
</div>

flex-wrap: cuando no entra todo en una fila

Por defecto flex intenta meter todo en una sola línea, achicando a los hijos si hace falta. flex-wrap les permite pasar a una segunda fila cuando no caben.

ReactAstroTailwindViteVueNodeCSSHTML
<div class="flex flex-wrap gap-2">
  <!-- 8 tags que no caben en una sola fila -->
</div>

flex-1 y grow/shrink: repartir espacio sobrante

flex-1 hace que un hijo crezca para ocupar todo el espacio disponible, repartido entre todos los que también tengan flex-1. Muy usado para 'que este elemento ocupe el resto del ancho'.

fijo
flex-1
<div class="flex gap-2">
  <div class="w-24">Fijo 96px</div>
  <div class="flex-1">Ocupa el resto</div>
</div>

Patrón real: card con footer pegado abajo

Combinando flex-col en el contenedor y flex-1 en el cuerpo, el footer de la card queda siempre pegado abajo sin importar cuánto contenido tenga el cuerpo — muy común en grillas de cards de altura pareja.

Título
Cuerpo con contenido variable...
Footer
<div class="flex flex-col h-64 border rounded-xl">
  <div class="p-4">Título</div>
  <div class="flex-1 p-4">Cuerpo (crece)</div>
  <div class="p-4 border-t">Footer siempre abajo</div>
</div>