HTML/CSS lab

05 · Box model

Margin & Padding

Todo elemento HTML es una caja. Esa caja tiene, de afuera hacia adentro: margin (espacio fuera del borde, empuja a otros elementos), border (el borde en sí) y padding (espacio dentro del borde, entre el borde y el contenido).

margin
padding
content

Margin en todos los lados

m-{n} aplica margen en las 4 direcciones. La escala de Tailwind (1, 2, 4, 8...) corresponde a múltiplos de 0.25rem, así que m-4 = 1rem = 16px.

Tengo m-8
<div class="m-8 bg-teal-100">
  Tengo m-8 (32px) de margen
</div>

Margin por eje y por lado

mx / my controlan un eje completo (horizontal o vertical). mt, mr, mb, ml controlan un solo lado.

mx-auto
<div class="mt-2 mr-8 mb-2 ml-2">...</div>
<div class="mx-8 my-2">...</div>

Margin negativo

Anteponiendo un guion se obtiene margen negativo, útil para superponer elementos o compensar el espaciado de un padre.

-mt-6
<div class="-mt-6 bg-rose-100">
  Se superpone al elemento de arriba
</div>

Padding en todos los lados y por eje

Misma lógica que margin, pero el espacio queda dentro del borde. p-{n}, px-{n}/py-{n}, pt/pr/pb/pl-{n}.

px-6 py-3
<div class="px-6 py-3 bg-teal-100">
  Padding horizontal y vertical distinto
</div>

Margin collapsing (colapso de márgenes)

Cuando dos elementos hermanos en flujo normal (no flex/grid) tienen margin vertical, no se suman: se colapsan y prevalece el mayor.

Párrafo A (mb-8)

Párrafo B (mt-4)

<p class="mb-8">Párrafo A</p>
<p class="mt-4">Párrafo B</p>
<!-- El espacio real entre A y B es 32px (mb-8),
     no 32px + 16px = 48px -->

space-y / space-x como alternativa

En vez de poner margin a cada hijo, space-y-{n} agrega separación vertical automática entre hermanos directos, sin depender de márgenes que colapsan.

Item 1
Item 2
Item 3
<div class="flex flex-col space-y-4">
  <div>Item 1</div>
  <div>Item 2</div>
  <div>Item 3</div>
</div>