Aquí viene uno de los conceptos más fundamentales de CSS — algo que una vez que entiendes, cambia completamente cómo piensas sobre el diseño web.
Absolutamente todos los elementos de una página web son cajas. Esa imagen, ese botón, ese párrafo, ese div invisible que ni se nota. Todo. Todos son rectángulos, y todos tienen la misma estructura interna: el modelo de caja.
Cada elemento es como una cebolla con cuatro capas, de adentro hacia afuera:
Aquí viene el giro que confunde a muchos principiantes. Prueba este ejemplo:
¿Cuánto mide el elemento? La mayoría diría: 300px de ancho y 200px de alto. Es lo que le indicaste, ¿no?
Pero el tamaño real es 314px de ancho y 214px de alto. Sorpresa.
¿Por qué? Porque cuando asignas width y height, se lo estás dando únicamente a la capa del contenido. Las demás capas se suman por fuera:
El margen queda fuera de esta ecuación. No suma al tamaño del elemento — es espacio exterior. Las únicas capas que afectan al tamaño final son: contenido, padding y borde.
Crea un .mi-caja con width: 300px, height: 200px, padding: 10px y border: 2px solid red. Antes de inspeccionarlo, intenta calcular cuánto medirá realmente la caja contando contenido, padding y borde.
Ahora ya sabes por qué los diseños a veces no miden lo que esperabas...