La caja y el flujo del documento
💡 🎯 Al terminar esta lección podrás…
- Predecir el tamaño real de una caja y usar
box-sizing: border-box. - Manejar
marginypadding, incluido el colapso de márgenes. - Elegir
displayy entender cómo fluye el contenido. - Controlar el desbordamiento y dimensionar con
max-width,aspect-ratioyobject-fit.
1.Todo es una caja
Para el navegador, cada elemento es una caja rectangular, sin excepción: un párrafo, una imagen, un enlace, incluso un círculo es una caja con las esquinas redondeadas. Entender las cajas es entender el 80% del diseño con CSS.
| Capa | Propiedad | Qué hace | Se ve el fondo |
|---|---|---|---|
| Contenido | width, height | El espacio para el texto o la imagen | Sí |
| Relleno | padding | Espacio dentro de la caja | Sí (con el color de fondo del elemento) |
| Borde | border | La línea alrededor del relleno | Es visible |
| Margen | margin | Espacio fuera: separa de otros elementos | No (siempre transparente) |
💡 Consejo · Mira tus cajas
En las herramientas del navegador (F12), al pasar el cursor sobre un elemento se colorean sus capas: azul = contenido, verde = relleno, amarillo = borde, naranja = margen. Es la mejor forma de entender por qué algo está donde está.
2.box-sizing: la propiedad que te ahorra dolores de cabeza
Por defecto, width mide solo el contenido. Si pones width: 300px y padding: 20px y border: 5px, la caja real mide 300 + 40 + 10 = 350 px. Eso complica todos los cálculos.
Con box-sizing: border-box, width incluye el relleno y el borde: la caja mide exactamente 300px.
*, *::before, *::after {
box-sizing: border-box;
}
Con esa regla, width: 50% significa la mitad del contenedor, incluidos relleno y borde. Es lo que esperas.
3.Margin y padding en detalle
| Escritura | Significa |
|---|---|
padding: 16px | Los cuatro lados |
padding: 8px 16px | Arriba y abajo 8px · izquierda y derecha 16px |
padding: 8px 16px 4px | Arriba 8 · laterales 16 · abajo 4 |
padding: 1px 2px 3px 4px | Arriba, derecha, abajo, izquierda (sentido del reloj) |
padding-top, padding-left… | Un solo lado |
padding-inline, padding-block | Lados horizontales / verticales (según el idioma). Igual con margin |
Márgenes: tres comportamientos que sorprenden
margin: 0 autocentra horizontalmente un bloque que tenga ancho (widthomax-width).- Los márgenes verticales se «colapsan»: dos bloques con
margin-bottom: 30pxymargin-top: 20pxno se separan 50px, sino 30px (se queda el mayor). - Los márgenes pueden ser negativos (
margin-left: -10px) para acercar o superponer elementos. Úsalo con cuidado.
📌 Nota · ¿Margin o padding?
Una regla práctica: padding para el espacio interior de un componente; margin para separar un componente de otros; y para separar los hijos de un contenedor flex/grid, mejor gap (lo verás en las lecciones 6 y 7).
4.Bordes, esquinas y contornos
.caja {
border: 2px solid #4f46e5; /* ancho, estilo, color */
border-bottom: 4px dashed crimson; /* un solo lado */
border-radius: 12px; /* esquinas redondeadas */
}
.circulo { width: 80px; height: 80px; border-radius: 50%; }
.pildora { border-radius: 999px; }
- Estilos de borde:
solid,dashed,dotted,double,none. border-radius: 50%en una caja cuadrada la convierte en círculo;999pxen una caja larga, en una píldora.outlineparece un borde pero no ocupa espacio ni altera el diseño. Por eso lo usa el foco del teclado (outline: 3px solid).
5.display: bloque, en línea y los demás
| Valor | Comportamiento | Ejemplos |
|---|---|---|
block | Ocupa todo el ancho y empieza en línea nueva. Acepta width, height, márgenes | div, p, h1, section |
inline | Fluye dentro del texto. Ignora width/height y los márgenes verticales | span, a, strong, em |
inline-block | Fluye como texto pero acepta ancho, alto y márgenes | Botones, etiquetas |
none | El elemento desaparece (no ocupa espacio) | — |
flex / grid | Convierten el elemento en un contenedor de layout | Lecciones 6 y 7 |
Ocultar un elemento: tres maneras distintas
| Propiedad | Se ve | Ocupa espacio | Lector de pantalla |
|---|---|---|---|
display: none | No | No | No lo lee |
visibility: hidden | No | Sí | No lo lee |
opacity: 0 | No | Sí | Sí lo lee (y se puede pulsar) |
6.Cuando el contenido no cabe: overflow
| Valor | Efecto |
|---|---|
visible | El contenido se sale de la caja (valor por defecto) |
hidden | Recorta lo que sobra |
auto | Muestra barras de desplazamiento solo si hacen falta |
scroll | Siempre muestra barras |
clip | Recorta sin crear un contenedor de scroll |
.titulo-largo {
white-space: nowrap; /* no saltar de línea */
overflow: hidden; /* recortar lo que sobra */
text-overflow: ellipsis; /* terminar con … */
}
.cuadro-scroll { max-height: 160px; overflow-y: auto; }
7.Tamaños: width, height y proporciones
| Propiedad | Para qué |
|---|---|
width / height | Tamaño fijo o relativo |
min-width / min-height | Mínimo: la caja no se encoge por debajo |
max-width / max-height | Máximo: la caja no crece por encima |
aspect-ratio | Mantiene una proporción (16 / 9, 1) |
object-fit | Cómo se ajusta una imagen a su caja: cover (recorta), contain (entera) |
object-position | Qué parte de la imagen se ve cuando se recorta |
.foto {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
}
💡 Consejo · max-width en lugar de width
Un bloque con width: 800px se desborda en un celular. Con max-width: 800px; width: 100%; (o simplemente max-width), se adapta: llega a 800px en pantallas grandes y se encoge en las pequeñas.
8.Errores frecuentes
- No usar
box-sizing: border-boxy que los anchos «no cuadren». - Esperar que
margin: autocentre un bloque sin ancho: no hay nada que centrar. - Dar
width/heighta un elementoinline: se ignora; cámbialo ainline-blockoblock. - Margen vertical que «no suma»: es el colapso de márgenes.
- Usar
heightfijo para textos: si el texto crece, se sale. Prefieremin-height. - Usar
marginpara separar elementos dentro de un flex/grid en lugar degap. - Esconder con
opacity: 0algo que no debe ser accesible.
📒 Apuntes para llevar
- Cada elemento es una caja: contenido,
padding,borderymargin. box-sizing: border-boxhace quewidthincluya relleno y borde: ponlo en todo el proyecto.paddinges interior y tiene el color de fondo;margines exterior y siempre transparente.- Los márgenes verticales se colapsan y
margin: 0 autocentra bloques con ancho. border-radiusredondea (50% = círculo);outlineno ocupa espacio.block,inline,inline-blockynonecambian cómo fluye una caja;visibilityyopacityocultan de otras formas.overflowcontrola lo que no cabe;text-overflow: ellipsisrecorta texto con «…».max-width,min-height,aspect-ratioyobject-fithacen cajas flexibles.
9.Glosario
| Término | Significado |
|---|---|
| Modelo de caja | Idea de que todo elemento es un rectángulo con contenido, relleno, borde y margen. |
box-sizing | Define si width mide solo el contenido o también el relleno y el borde. |
| Colapso de márgenes | Fusión de márgenes verticales adyacentes: se aplica el mayor. |
| Bloque / en línea | Dos formas básicas de fluir: ocupar la línea completa o fluir con el texto. |
overflow | Qué hacer con el contenido que excede su caja. |
aspect-ratio | Proporción ancho/alto que mantiene una caja. |
object-fit | Cómo se ajusta una imagen al tamaño de su caja. |
outline | Contorno que no ocupa espacio, usado en el foco. |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
Una caja tiene width: 300px; padding: 20px; border: 5px solid; y box-sizing: content-box. ¿Cuánto mide en total?
300 + 20×2 + 5×2 = 350px. Con border-box mediría 300px.
Dos bloques consecutivos: el primero con margin-bottom: 30px, el segundo con margin-top: 20px. ¿Cuánta separación hay?
Los márgenes verticales se colapsan: se queda el mayor, 30px.
margin: 0 auto no centra mi div. ¿Qué falta casi seguro?
Sin ancho, un bloque ya ocupa todo el espacio: no hay nada que centrar.
¿Qué diferencia a visibility: hidden de display: none?
Con visibility: hidden el hueco permanece; con display: none desaparece del flujo.
¿Qué hace object-fit: cover en una imagen?
cover mantiene la proporción y recorta lo que sobra; contain la muestra completa.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.