Saltar al contenido

CSS, de a poco

Curso de CSS

Box model

Lección 01 de 37 · 3 min

Para CSS, todo elemento es una caja. Antes de color, tipografía o layout, conviene entender de qué está hecha esa caja y cuánto lugar ocupa.

Cuatro capas

Cada caja tiene cuatro capas, de adentro hacia afuera. Cada una tiene su nombre en CSS:

  1. ContenidocontentEl texto, la imagen o los hijos. Lo que miden width y height.
  2. RellenopaddingAire entre el contenido y el borde. Toma el fondo de la caja.
  3. BordeborderLa línea que la rodea. Puede medir 0 y no verse.
  4. MargenmarginEspacio afuera del borde, que separa la caja de las demás. Siempre es transparente.

Mové los controles y mirá cómo cambia la caja: el contenido es el bloque de arriba, el relleno el piso que lo rodea (su ancho, en naranja), el borde el aro y el margen el contorno punteado en el suelo. Está punteado porque ocupa lugar pero no se pinta.

.caja120 + 2×24 + 2×8 = 184px
box-sizing
caja.css
.caja {
box-sizing: content-box;
width: 120px;
padding: 24px;
border: 8px solid;
margin: 24px;
}
caja.html
<div class="box-content w-30 p-6 border-8 m-6">…</div>

Qué mide width

Por defecto box-sizing vale content-box: width mide solo el contenido, y el relleno y el borde se suman por fuera. Una caja de width: 120px con padding: 24px y un borde de 8px termina midiendo 184px.

content-boxpor defecto
width
120px
contenido
120px
ocupa
184px
border-boxcon el reset
width
120px
contenido
56px
ocupa
120px
La misma caja con los dos valores de box-sizing: width 120px, padding 24px y un borde de 8px.

Con border-box, width mide hasta el borde inclusive. El relleno y el borde se descuentan del contenido, y la caja mide lo que dice. Por eso casi todos los proyectos arrancan con este reset:

reset.css
*,
*::before,
*::after {
box-sizing: border-box;
}

El margen queda afuera en los dos casos: separa la caja de las demás, pero nunca cuenta en su ancho.

Atajos

padding y margin aceptan de uno a cuatro valores. Se leen como un reloj: arriba, derecha, abajo, izquierda.

padding: 8px 16px 24px 4pxarranca arriba, gira como un reloj
arriba8pxderecha16pxabajo24pxizquierda4px
styles.css
.caja {
padding: 16px; /* los cuatro lados */
padding: 8px 16px; /* vertical | horizontal */
padding: 8px 16px 24px; /* arriba | horizontal | abajo */
padding: 8px 16px 24px 4px; /* arriba | derecha | abajo | izquierda */
}

Si la página puede estar en otro idioma, mejor usar las propiedades lógicas: padding-inline y padding-block siguen la dirección del texto en vez de izquierda y derecha.

En Tailwind

En Tailwind cada propiedad de la caja tiene su clase. La escala de espaciado avanza de a 4px (--spacing vale 0.25rem), así que p-6 son 24px y w-30 son 120px. Si el valor no cae en la escala, va entre corchetes: p-[7px].

CSSTailwind
box-sizing: border-boxbox-border
box-sizing: content-boxbox-content
width: 120pxw-30 · w-[120px]
padding: 24px · margin: 24pxp-6 · m-6
border: 8px solidborder-8
border-width: 1pxborder
padding-top, -right, -bottom, -leftpt-* pr-* pb-* pl-*
padding-inline · padding-blockpx-* · py-*
padding-inline-startps-*
caja.html
<!-- 8px 16px 24px 4px, lado por lado -->
<div class="pt-2 pr-4 pb-6 pl-1">…</div>
<!-- vertical | horizontal, con propiedades lógicas -->
<div class="px-4 py-2 border-2 m-4">…</div>
<!-- volver al modelo clásico en un solo elemento -->
<div class="box-content w-30 p-6 border-8">…</div>