¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

El modelo de caja, flexbox y grid

Después de esta lección: Puedo maquetar una página con el modelo de caja, flexbox y grid.

Lección de 65 min1 comandoLaboratorio de web en el navegador: HTML, CSS y JavaScript con vista previa en directo

Una caja de 200 píxeles ocupa 250

El modelo de caja dice que cada elemento de una página es una caja rectangular, con contenido, relleno, borde y margen. Entenderlo explica por qué una caja de 200 píxeles de ancho puede ocupar 250.

Piensa en la carta de la cafetería de tu facultad. Cada plato es una tarjeta. Si el cálculo del ancho falla, las tarjetas no caben en una fila y la página se rompe.

Al terminar esta lección

Nota

Puedo maquetar una página con el modelo de caja, flexbox y grid.

Palabras clave

PalabraQué significaEjemplo
Rellenoel espacio dentro de la caja, entre el contenido y el bordepadding
Bordela línea que rodea el rellenoborder
Margenel espacio fuera de la caja, hasta la siguientemargin
Flexboxun diseño que reparte las cajas en una fila o una columnadisplay: flex
Gridun diseño que reparte las cajas en filas y columnasdisplay: grid
Píxelun punto de la pantalla, la unidad de medida de esta lección200px

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cada elemento es una caja de cuatro capas

De dentro hacia fuera, una caja tiene el contenido, el relleno, el borde y el margen. El relleno da aire al contenido. El margen separa la caja de las vecinas.

Por defecto, width mide solo el contenido. El relleno y el borde se suman después, y la caja ocupa más de lo que pone en width.

Una tarjeta de plato con sus cuatro capas

Código: web
.plato {
  width: 200px;
  padding: 20px;
  border: 5px solid #b3402a;
  margin: 10px;
}

Ejemplo resuelto: lo que ocupa la tarjeta

CapaPor defectoCon border-box
Contenido200 px150 px
Relleno, 20 px a cada lado40 px40 px
Borde, 5 px a cada lado10 px10 px
Caja visible250 px200 px
Margen, 10 px a cada lado20 px20 px
Espacio total en la fila270 px220 px

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Con border-box, width incluye relleno y borde

La propiedad box-sizing: border-box cambia el cálculo. Entonces width mide el contenido, el relleno y el borde juntos. Una caja de 200 píxeles mide 200 de verdad.

Muchas hojas de estilo lo ponen para todos los elementos con el selector *. El margen sigue quedando fuera.

Una regla para todos los elementos

Código: web
* {
  box-sizing: border-box;
}

Un error frecuente

Advertencia

Mucha gente cree que width es siempre el ancho total de la caja. Por defecto solo mide el contenido. El relleno y el borde se suman. Usa border-box si quieres que width sea lo que ves.

Flexbox reparte las cajas en una línea

Con display: flex en el padre, sus hijos se colocan en una fila. gap deja un hueco fijo entre ellos. justify-content reparte el espacio que sobra.

Flexbox piensa en una dimensión: una fila o una columna cada vez. Sirve para menús, barras y tarjetas en línea.

Tres platos en una fila con flexbox

Código: web
.platos {
  display: flex;
  gap: 1rem;
  justify-content: space-between;
}

<ul class="platos">
  <li>Lentejas</li>
  <li>Paella</li>
  <li>Tortilla</li>
</ul>

Grid reparte las cajas en filas y columnas

Con display: grid, el padre se divide en una cuadrícula. grid-template-columns dice cuántas columnas hay y cómo se reparten. La unidad 1fr es una parte del espacio libre.

Grid piensa en dos dimensiones, filas y columnas a la vez. Sirve para el esqueleto de una página o una galería.

Tres columnas del mismo ancho con grid

Código: web
.platos {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 1rem;
}

Relleno y margen en la página del laboratorio

La hoja site/style.css usa relleno y margen en muchas reglas. Un grep con la opción -E busca dos palabras a la vez. Muestra 13 líneas, cada una con su número.

Mira las líneas 45 y 46, que son la tarjeta .dish: relleno y margen inferior. Y la línea 31, margin: 0 auto, que centra el bloque main en la pantalla.

Buscar relleno y margen en el CSS

Comando
docker exec jupyter grep -n -E "padding|margin" site/style.css

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Sobre este laboratorio y su código: Laboratorio de web en el navegador: HTML, CSS y JavaScript con vista previa en directo

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.