Skip to content

5. Cajas y Modelo de Caja (Box Model)

El Box Model (Modelo de Caja) es uno de los conceptos mรกs fundamentales de CSS. Entenderlo es esencial para controlar el diseรฑo y espaciado de los elementos.


El Box Model define cรณmo se calculan las dimensiones de un elemento. Cada caja tiene 4 รกreas concรฉntricas:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ MARGIN (exterior) โ”‚ โ† Espacio fuera del elemento
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ BORDER (borde) โ”‚ โ”‚ โ† Lรญnea del borde
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ PADDING (relleno) โ”‚ โ”‚ โ”‚ โ† Espacio interno
โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ CONTENT โ”‚ โ”‚ โ”‚ โ”‚ โ† Contenido (texto, imรกgenes)
โ”‚ โ”‚ โ”‚ โ”‚ (width/height) โ”‚ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  1. Content (Contenido) Centro

    • El รกrea donde aparece el contenido (texto, imรกgenes)
    • Controlado por width y height
  2. Padding (Relleno) Interno

    • Espacio transparente entre el contenido y el borde
    • Aumenta el tamaรฑo visual del elemento
    • Hereda el color de fondo del elemento
  3. Border (Borde) Lรญnea

    • Lรญnea que rodea el padding y el contenido
    • Puede tener color, estilo y grosor
    • Aumenta el tamaรฑo total del elemento
  4. Margin (Margen) Externo

    • Espacio transparente fuera del borde
    • Separa el elemento de otros elementos
    • No tiene color de fondo (siempre transparente)

Definen las dimensiones del รกrea de contenido.

/* Valores de width y height */
.elemento {
width: 300px; /* Ancho fijo */
height: 200px; /* Alto fijo */
width: 50%; /* Porcentaje del padre */
height: 100vh; /* Porcentaje del viewport */
width: auto; /* Automรกtico (default) */
height: auto; /* Automรกtico (default) */
}
/* Pรญxeles - Tamaรฑo fijo */
.caja-fija {
width: 400px;
height: 300px;
}
/* Porcentaje - Relativo al padre */
.caja-fluida {
width: 80%;
height: 50%;
}
/* Viewport - Relativo a la ventana */
.caja-pantalla {
width: 100vw; /* 100% del ancho de la ventana */
height: 100vh; /* 100% del alto de la ventana */
}
/* Auto - Ajusta al contenido */
.caja-auto {
width: auto; /* Se ajusta al contenido o al padre */
height: auto; /* Se ajusta al contenido */
}

Establecen lรญmites para las dimensiones.

/* Lรญmites de ancho */
.elemento {
min-width: 200px; /* Ancho mรญnimo */
max-width: 800px; /* Ancho mรกximo */
min-height: 100px; /* Alto mรญnimo */
max-height: 500px; /* Alto mรกximo */
}
/* Contenedor responsivo con lรญmite */
.contenedor {
width: 100%;
max-width: 1200px; /* No mรกs ancho que 1200px */
margin: 0 auto;
padding: 0 20px;
}
/* Imagen que no excede su tamaรฑo */
img {
max-width: 100%; /* No mรกs ancha que su contenedor */
height: auto;
}
/* Texto con ancho mรกximo para legibilidad */
.articulo {
max-width: 65ch; /* Mรกximo 65 caracteres */
margin: 0 auto;
}

El padding es el espacio entre el contenido y el borde. Aumenta el รกrea visible del elemento.

/* Padding individual */
.elemento {
padding-top: 10px;
padding-right: 20px;
padding-bottom: 10px;
padding-left: 20px;
}
/* Padding abreviado (shorthand) */
.elemento {
padding: 10px 20px 10px 20px; /* top right bottom left (sentido horario) */
padding: 10px 20px; /* vertical horizontal */
padding: 10px; /* todos los lados iguales */
}
/* 1 valor: Todos los lados */
.padding-1 {
padding: 20px;
/* top: 20px, right: 20px, bottom: 20px, left: 20px */
}
/* 2 valores: Vertical | Horizontal */
.padding-2 {
padding: 10px 20px;
/* top: 10px, right: 20px, bottom: 10px, left: 20px */
}
/* 3 valores: Top | Horizontal | Bottom */
.padding-3 {
padding: 10px 20px 30px;
/* top: 10px, right: 20px, bottom: 30px, left: 20px */
}
/* 4 valores: Top | Right | Bottom | Left (sentido horario โฐ) */
.padding-4 {
padding: 10px 20px 30px 40px;
/* top: 10px, right: 20px, bottom: 30px, left: 40px */
}
/* El padding hereda el color de fondo */
.caja {
background-color: #3498db;
padding: 30px;
color: white;
}
/* El รกrea de padding tambiรฉn serรก azul */
/* Con imagen de fondo */
.caja-imagen {
background-image: url('patron.png');
padding: 40px;
}
/* La imagen se extiende al รกrea de padding */

El border es una lรญnea que rodea el padding y el contenido.

/* Propiedades individuales */
.elemento {
border-width: 2px; /* Grosor */
border-style: solid; /* Estilo */
border-color: #3498db; /* Color */
}
/* Shorthand (forma corta) */
.elemento {
border: 2px solid #3498db;
/* grosor estilo color */
}
/* Estilos de borde */
.solido { border: 3px solid black; } /* โ”€โ”€โ”€โ”€ Lรญnea sรณlida */
.punteado { border: 3px dotted black; } /* ยทยทยทยท Puntos */
.discontinuo { border: 3px dashed black; } /* ---- Guiones */
.doble { border: 3px double black; } /* โ•โ•โ•โ• Lรญnea doble */
.ranura { border: 3px groove black; } /* Efecto 3D ranura */
.cresta { border: 3px ridge black; } /* Efecto 3D cresta */
.insertado { border: 3px inset black; } /* Efecto 3D insertado */
.resaltado { border: 3px outset black; } /* Efecto 3D resaltado */
.ninguno { border: none; } /* Sin borde */
.oculto { border: hidden; } /* Oculto (para tablas) */
/* border-image (avanzado) */
.borde-imagen {
border: 10px solid transparent;
border-image: url('borde-decorativo.png') 30 round;
}
/* Degradado como borde */
.borde-degradado {
border: 4px solid;
border-image: linear-gradient(45deg, #3498db, #2ecc71) 1;
}

El margin es el espacio transparente fuera del borde. Separa el elemento de otros elementos.

/* Margin individual */
.elemento {
margin-top: 10px;
margin-right: 20px;
margin-bottom: 10px;
margin-left: 20px;
}
/* Margin abreviado (shorthand) */
.elemento {
margin: 10px 20px 10px 20px; /* top right bottom left */
margin: 10px 20px; /* vertical horizontal */
margin: 10px; /* todos los lados */
}
/* Centrar horizontalmente con margin auto */
.contenedor-centrado {
width: 800px;
margin: 0 auto; /* top/bottom: 0, left/right: auto */
}
/* Centrar con max-width */
.contenedor-responsive {
max-width: 1200px;
margin-left: auto;
margin-right: auto;
padding: 0 20px;
}
/* โŒ No funciona para centrar verticalmente */
.no-funciona {
height: 200px;
margin: auto 0; /* No centra verticalmente */
}
CaracterรญsticaPadding ๐ŸŽจMargin ๐Ÿ“
UbicaciรณnDentro del bordeFuera del borde
Color de fondoHereda el fondo del elementoSiempre transparente
Valores negativosโŒ No permitidosโœ… Permitidos
Click areaโœ… Parte del elemento clickeableโŒ No es clickeable
ColapsoโŒ No colapsaโœ… Mรกrgenes verticales colapsan
Uso comรบnEspacio internoSeparaciรณn entre elementos

La propiedad box-sizing cambia cรณmo se calculan las dimensiones de un elemento.

/* content-box: width/height solo afectan al contenido */
.content-box {
box-sizing: content-box; /* Default */
width: 200px;
padding: 20px;
border: 5px solid black;
}
/* Tamaรฑo total:
200px (width) + 40px (padding) + 10px (border) = 250px
*/
/* border-box: width/height incluyen padding y border */
.border-box {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid black;
}
/* Tamaรฑo total: 200px
El contenido se ajusta: 200px - 40px (padding) - 10px (border) = 150px
*/
/* CONTENT-BOX (default) */
.caja-content {
box-sizing: content-box;
width: 200px;
padding: 20px;
border: 5px solid #3498db;
background: #ecf0f1;
}
/*
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Border: 5px โ”‚ โ† +5px cada lado
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Padding: 20px โ”‚ โ”‚ โ† +20px cada lado
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ Content: 200px โ”‚ โ”‚ โ”‚ โ† Width definido
โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
Tamaรฑo total: 250px
*/
/* BORDER-BOX (recomendado) */
.caja-border {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 5px solid #3498db;
background: #ecf0f1;
}
/*
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Border: 5px โ”‚ โ† Incluido en 200px
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Padding: 20px โ”‚ โ”‚ โ† Incluido en 200px
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ Content: 150px โ”‚ โ”‚ โ”‚ โ† Ajustado automรกticamente
โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
Tamaรฑo total: 200px (como definiste)
*/

Las herramientas de desarrollador del navegador son esenciales para entender y depurar el Box Model.

  1. Abrir DevTools F12

    • Chrome/Edge: F12 o Ctrl+Shift+I (Cmd+Option+I en Mac)
    • Firefox: F12 o Ctrl+Shift+I (Cmd+Option+I en Mac)
    • Safari: Cmd+Option+I (habilitar menรบ Desarrollo primero)
  2. Seleccionar elemento

    • Clic en el icono de selector (๐Ÿ”)
    • Hover sobre el elemento en la pรกgina
    • O clic derecho โ†’ โ€œInspeccionar elementoโ€
  3. Ver el Box Model

    • Panel โ€œComputedโ€ o โ€œCalculadoโ€
    • Diagrama visual del Box Model
    • Valores exactos de cada รกrea
  4. Editar en vivo

    • Clic en cualquier valor para editarlo
    • Ver cambios en tiempo real
    • Experimentar sin modificar el cรณdigo
Diagrama en DevTools:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ margin: 20 โ”‚ โ† Margen (naranja)
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ border: 5 โ”‚ โ”‚ โ† Borde (amarillo/dorado)
โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ padding: 10 โ”‚ โ”‚ โ”‚ โ† Padding (verde)
โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ 300ร—200 โ”‚ โ”‚ โ”‚ โ”‚ โ† Contenido (azul)
โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚
โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
๐Ÿ”ต AZUL - Content (Contenido)
- รrea del contenido
- Definida por width y height
๐ŸŸข VERDE - Padding (Relleno)
- Espacio interno
- Entre contenido y borde
๐ŸŸก AMARILLO - Border (Borde)
- Lรญnea del borde
- Grosor definido por border-width
๐ŸŸ  NARANJA - Margin (Margen)
- Espacio externo
- Separaciรณn con otros elementos
โฌ†๏ธ โฌ‡๏ธ - Incrementar/decrementar valor en 1
Shift + โฌ†๏ธโฌ‡๏ธ - Incrementar/decrementar en 10
Alt + โฌ†๏ธโฌ‡๏ธ - Incrementar/decrementar en 0.1
Ctrl + Click - Editar mรบltiples valores
Esc - Cerrar panel

๐Ÿ