Modelo de caja CSS: margin, padding, border y display

Visualizador del modelo de caja CSS

Modelo de caja CSS: margin vs padding, border, display | We.Inc

Mueve los controles de contenido, padding, border y margin y mira cómo se redibuja el modelo de caja, con box-sizing, colapso de márgenes, estilos de borde y todos los valores de display comparados en vivo.

Cada elemento se dibuja como rectángulos anidados: el contenido, luego el padding (espacio dentro del borde, pintado con el fondo), luego el borde y luego el margin (espacio transparente exterior que aparta a los vecinos). Con box-sizing: border-box, el ancho que defines incluye el padding y el borde, lo que hace los layouts mucho más predecibles. La propiedad display decide cómo fluyen las cajas.

Las cuatro capas, de dentro hacia fuera

Mueve los cuatro controles y el diagrama, el tamaño total medido y el CSS cambian a la vez. Debajo del visualizador puedes cambiar box-sizing, ver cómo dos márgenes colapsan en uno y comparar block, inline, inline-block, flex, grid y none lado a lado con los mismos tres elementos.

Preguntas frecuentes

¿Qué diferencia hay entre margin y padding?

El padding está dentro del borde, así que lo rellena el fondo del elemento y forma parte de su zona clicable. El margin está fuera del borde, siempre es transparente y solo separa el elemento de los demás. Además, los márgenes verticales entre bloques pueden colapsar entre sí, mientras que el padding nunca colapsa.

¿Por qué mi elemento es más ancho que el ancho que definí?

Con el box-sizing: content-box por defecto, width se aplica solo al contenido, y el padding y el borde se suman encima. Una caja de 300px con 20px de padding y un borde de 2px se renderiza con 344px de ancho. Cambia a box-sizing: border-box y se queda en 300px, con el contenido encogiéndose para caber.

¿Cuándo colapsan los márgenes?

Los márgenes superior e inferior de las cajas block en flujo normal se fusionan cuando se tocan: entre hermanos, y entre un padre y su primer o último hijo cuando no los separa ningún borde, padding ni contenido inline. Gana el margen mayor. Los márgenes nunca colapsan dentro de contenedores flex o grid, ni en horizontal.

¿Qué diferencia hay entre display: none y visibility: hidden?

display: none elimina por completo el elemento del layout, así que el espacio se cierra y los lectores de pantalla lo omiten. visibility: hidden mantiene el espacio reservado pero no pinta nada, y el contenido también queda oculto para las tecnologías de asistencia. opacity: 0 conserva tanto el espacio como la posibilidad de recibir clics o foco.

¿Puedo definir width en un elemento inline?

No. El ancho, el alto y los márgenes verticales se ignoran en una caja inline normal como un span. El padding vertical se pinta pero no separa las líneas. Cámbialo a inline-block, o convierte el padre en un contenedor flex, y esos tamaños empiezan a aplicarse.

content-box frente a border-box en números

Bordes más allá de una línea simple

Cómo cambia display la caja

¿Margin o padding? Elige según la tarea

Cuál usar

Colapso de márgenes, en vivo

El primer par muestra dos hermanos cuyos márgenes de 24px y 40px se encuentran: la separación es de 40px, no de 64px. El segundo par está en un contenedor flow-root, que impide que se fusionen los márgenes del padre y del hijo, y el tercero usa flex, donde nada colapsa.

Colapso entre hermanos y entre padre e hijo

Edita los márgenes y observa las separaciones. Añadir padding-top: 1px a la caja exterior también impide que el padre y el hijo se fusionen.

Estilos de borde y radio

Los ocho estilos de borde visibles

groove, ridge, inset y outset sombrean el borde para simular profundidad. Se ven mejor a partir de 4px.

Formas con radio: redondeada, píldora, círculo, elipse

Un radio enorme como 999px crea una píldora de cualquier longitud. 50% en un cuadrado da un círculo.

Todos los valores de display con los mismos tres elementos

Valores de display comparados

block, inline, inline-block, flex y grid lado a lado

Cada fila contiene los mismos tres span con width: 80px y padding. Solo inline ignora el ancho.

display: none vs visibility: hidden vs opacity: 0

Tres formas de ocultar, comparadas

El elemento central oculto de tres formas

Fíjate en el hueco que dejan visibility y opacity, y en cómo se cierra con display: none.

El reset de border-box

Aplica border-box en todas partes

Se incluyen los pseudoelementos porque también son cajas. El Preflight de Tailwind ya incluye esta regla.

Equivalentes en Tailwind

Utilidades del modelo de caja en Tailwind (escala de espaciado por defecto, 1 unidad = 0.25rem)

Visualizador del modelo de caja

Capa de margin

Caja renderizada (borde exterior)

Espacio ocupado, márgenes incluidos

El amarillo es el margin, la línea azul es el borde, el verde es el padding y el azul claro es el contenido.

ancho del borde

Copiar CSS

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio