El modelo de caja se compone de cuatro elementos: margin, border, padding y contenido.
Si entras a las herramientas de desarrollador de tu navegador y señalas un elemento HTML, en la sección de estilos te aparecerá una vista parecida a la anterior imagen, este es el modelo de caja del elemento señalado.
Qué es el contenido del elemento HTML
El contenido del elemento, como su nombre lo indica, es todo lo que está dentro del elemento. Este tiene medidas establecidas por las propiedades width y height, que representan la anchura y la altura, respectivamente. Si imaginamos una caja, este valor sería todo lo que decidas colocar dentro.
div{width:100px;height:100px;}
Qué son los bordes del elemento HTML
El border consiste en el perfil o borde de un elemento HTML. Si imaginamos una caja, sería la caja en sí. Para definir un borde es necesario utilizar las siguientes tres propiedades:
border-color: establece el color del borde.
border-style: establece el estilo propio del borde, estos pueden ser: none (sin borde), dotted (puntos), dashed (guiones), solid (continuo), double (doble continuo), groove (recuadro).
border-width: estable la anchura del borde.
También se puede establecer los tres valores en una sola propiedad border donde no importa el orden.
Qué es el espaciado interno del elemento HTML o padding
El padding consiste en el espacio entre el borde y el contenido del elemento HTML. Si imaginamos una caja, este valor sería el espacio entre la caja y lo que deseas guardar.
Por defecto, el navegador establece valores iniciales a algunas propiedades CSS, este es el caso de margin y padding. Una buena práctica es utilizar el selector universal para restablecer estos valores a 0, para que no surjan errores inesperados.
*{margin:0;padding:0;}
Qué es el tamaño total del elemento
El tamaño total del elemento está determinado por la suma de los valores de las propiedades borderpadding y widtho height, dependiendo del eje. La propiedad margin no está incluida en este cálculo.
El tamaño total del elemento será de 210px en ambos ejes, donde la suma fue: 150 (altura/anchura) + 20 x 2 (padding ambos lados) + 10 x 2 (borde ambos lados). Si evaluamos este elemento en las herramientas del desarrollador mostrará su tamaño como 210x210.
Aunque se conozca las medidas de los elementos de esta manera, no siempre existirá un control total. Por lo que podríamos establecer el tamaño total del elemento con width y height, y no solo del contenido, añadiendo la propiedad box-sizing.
Propiedad box-sizing
La propiedad box-sizing establece cómo se calculará el width y el height si incluyen bordes y espacios internos. Como buena práctica, se lo coloca en el selector universal, para que todos los elementos sigan esta tendencia.
*{box-sizing: border-box;}
Con el valor border-box, el tamaño total del elemento será igual al especificado en el width y height, provocando que las medidas del contenido cambien con respecto a los bordes y espacios internos.
Por ejemplo, con los estilos que definimos anteriormente, establezcamos esta nueva propiedad.
El tamaño total del elemento será de 150px en ambos ejes, donde se calcularon las medidas del contenido para que la suma total sea lo especificado en el width y height. Si evaluamos este elemento en las herramientas del desarrollador mostrará su tamaño total como 150x150 y el contenido como 90x90.
Conclusión, establece las medidas totales del elemento con width y height, junto con box-sizing: border-box, para que el contenido se adecue a las necesidades del contenedor.
¿Cuál es el problema con el tamaño de los bordes?
Recapitulando, el tamaño total de un elemento es la suma de tres: el borde, el espacio interior y el contenido.
Entonces, en algunas ocasiones tendrás la intención de añadir un borde al realizar un hover. Esto provocará que el elemento necesite más espacio del inicial, en un contenedor con más elementos puede ocasionar un conflicto.
Mira el siguiente ejemplo, e intenta poner el cursor sobre un elemento ¿qué sucede?
Observaste este comportamiento, debes tener cuidado con lo que agregas porque puedes provocar errores.
La solución a esto es colocar un borde de color transparent (transparente) y del mismo tamaño que el otro borde. Esto hará que el elemento se mantenga en su tamaño total, lo único que cambia es el color.
El modelo de caja también podemos verlo como los ogros... ¡Capas! ¡Los ogros tiene capas!
.
.
Esto es un tema muy mindblow 🤯. Básicamente porque todo en HTML son cajitas, sí, incluso un texto es una caja. Cuando tú insertas un texto, lo que estás haciendo es que estás insertando una cajita que adentro tiene texto (y lo mismo aplica para cualquier etiqueta). Esta cajita tiene un fondo transparente, pero si tú le pones cualquier fondo usando la propiedad background podrás ver esa cajita. Esta cajita, además de su contenido, tiene estas 3 capas externas que serían el padding, el border y el margin 👇:
.
padding: Es básicamente el espaciado que hay entre la caja y el contenido de la caja, es un espaciado interno. Lo solemos usar mucho para permitir que los elementos "respiren", por ejemplo, aquí les dejo una comparación de un botón sin padding y uno con padding 👇
.
.
border: Es el delineado que le podemos dar a una caja, y un borde puede ser tan grueso como quieras. Simplemente debemos ponerle el grosor, el tipo de borde y el color del borde, por ejemplo, podemos hacer una caja con bordes y líneas intermitentes OwO:
.
.
Nota como en este caso lo combiné incluso con Flexblox 7u7.
.
margin: Este es básicamente el espaciado entre elementos. Es la distancia que podemos dejar de un elemento hacia otro.
.
Con estas capitas podemos conformar el modelo de caja 😄.
.
Y para resumir la propiedad box-sizing: border-box; es sencilla: si pones esta propiedad, ekl tamaño final de tu caja va a ser del width que tú le pongas, si no la pones, eol tamaño final de tui caja va a ser del width que tú le pongas más el tamaño de tu padding, más el de tu borde má el de tu margin UwU.
.
Y de ahora en adelante cuando empieces a desarrollar, notarás que muchos usan esto en CSS 👇:
.
*{margin:0;padding:0; box-sizing: border-box;}
.
Básicamente usan el selector universal para aplicarle a toooooodas las etiquetas estas propiedades (es decir, resetean estas propiedades, porque por defecto, el navegador le pone ciertos estilos 😄), pero tú ahora ya sabes cómo funcionan 👀.
!Great explanation! Do you used the Faymann method frecuently? :D
¿Qué tan bueno o malo es hacer ese reseteo a las propiedades de margin, padding y box-sizing?
CSS Box Model
El tamaño de lo que se muestra en pantalla estará delimitado por 4 cosas: tamaño de contenido, tamaño de relleno (padding), tamaño del borde y el tamaño del margen.
El borde (border), en negro, es el límite que separa el interior del exterior del elemento.
El márgen (margin), en naranja, es la parte exterior del elemento, por fuera del borde.
El relleno (padding), en verde, es la parte interior del elemento, entre el contenido y el borde.
El contenido, en azul, es la parte interior del elemento, excluyendo el relleno.
Muy buena imagen
Buen aporte Thomas! Pero esta clase es sobre el modelo de caja 😅 Aún así lo que compartes es una excelente imagen para conocer diferentes estilos para un borde. Se que en esta clase se uso esa propiedad así que solo seria bueno mencionar el porque se esta compartiendo, saludos!
Gracias. Andaba justo buscando esta info
Holaa a todos les quiero compartir una herramienta que encontre para ver el medelo de caja en 3D 😲 hasta ahora unicamente sé que la tiene el navegador Edge de Microsoft.
Les dejo un gif de como se ve mi página :)
Espero les dé curiosidad 😄
Muchas gracias por el aporte!
Uff se lució EDGE 😁
Les comparto mis apuntes del curso definitivo de HTML y CSS.
Clase:
Modelo de caja
Estilos del modelo de caja
Margin
El estilo de margin puede ser un espacio externo de la caja hacia el exterior, es un espacio.
Es un espacio externo del elemento, es como decir la distancia que hay de tu cuerpo hasta tu pantalla o pared que tengas al frente.
Border
El borde puede estar o no.
Es la o las líneas que bordea un elemento por defecto viene transparente pero nosotros podemos agregarle color y un grosos.
Padding
Es distinto al margin, ya que el padding no es un espacio externo, sino que es un espacio interno, de la caja hacia adentro.
Nos ayuda a posicionar el contenido de la caja.
Contenido
Puede ser cualquier cosa que sea visible, ya sea un texto, imágenes, videos, etc.
Dentro de este también tenemos
Width
Es lo largo o ancho que va a generar que tiene la caja contenedora o el contenido.
Height
Es el alto que tiene o que queremos que tenga el contenido.
Con esto todo esto podemos jugar con las dimensiones de las etiquetas o del contenido de las mismas.
Position
También tenemos el position del contenido, que de acuerdo a este podemos jugar con sus posiciones top, right, borrom, left, se lo puede posicionar en cualquiera de estos.
Desglosando el modelo de caja
Si vemos más a profundidad el modelo de caja vemos que
Margin
Este viene por default es transparente, no se va a ver.
Color del fondo
Viene por default transparente, se lo puede cambiar si se desea.
Imagen de fondo
No viene una imagen de fondo, eso se rellena con el contenido como texto, imágenes, etc.
Relleno
Es el padding que es transparente.
Borde
Como lo dijimos este también es transparente, y si deseamos le podemos agregar un color y un ancho.
Contenido
Son las imágenes, videos, texto o cualquier cosa que podamos ver.
Padding
Podemos agregar padding de esta forma, donde el primer espacio corresponde al padding de arriba y abajo, el segundo espacio corresponde a los de la derecha e izquierda.
Con esto somos específico el tipo de padding queremos agregar.
También tenemos propiedades más específicas como ser top, bottom, left y right que solo agregan estilos en esas partes.
Es una buena práctica resetear las propiedades que el navegador implementa por defecto, lo hacemos con el selector universal *.
*{box-sizing: border-box;padding:0;margin:0;}
Box-sizing: border-box
Con esta propiedad y este valor podemos hace un cálculo automático para que el padding y border no se salgan de las dimensiones que queremos para nuestro elemento.
En palabras sencillas mete todo para adentro y realiza el cálculo hacia dentro en vez de sumar espacio al contenido hacia afuera. Lo que hace es restarlo, quitándole espacio al contenido, para que no tengamos problemas con las dimensiones.
Todo esto solo sucede con el padding y con el border, al margin no lo va a recalcular, el margin si crece hacia el exterior.
Me olvidé agregar algo al principio de mi aporte, se los dejo a continuación.
Los elementos que renderiza el navegador los renderiza como cajas que son contenedores que llevan un contenido.
A estas cajas le podemos agregar ciertos estilos, y estos estilos para modificarlas se lo llama modelo de caja.
Excelente aporte, muchas gracias
Excelente me gusto.
Gracias por ese aporte hermano
Notas de la clase
Con la propiedad box-sizing: border-box; css busca que todo el elemento mida lo que indicamos en width y height, esto con ayuda del padding y el border, de tal manera que se le resta espacio al content para poder lograr las dimensiones específicadas.
Gracias
Como tip, para comentar en el codigo en windows podemos usar ALT+SHIFT+A :)
👌👌👌
crtl k ctrl c
El Box-sizing solo aplicaria al padding y border. Como el Margin es fuera de la caja no lo considera para restar…
Creo que estas en lo correcto. Hice pruebas y el margin parece no afectar al content cuando se utiliza box-sizing.
El modelo de caja es la manera en que se representan todos los elementos html en una página. Cada elemento genera una caja, el comportamiento de esa caja depende de su clasificación: si es de línea o de bloque.
A todas las cajas se les puede aplicar las siguientes propiedades: width, height, padding, margin, border, background. Lo particular de este concepto es que por defecto el width se refiere al ancho del contenido de un elemento (no al ancho total, de borde a borde).
Consulta.
Es necesario colocar la propiedad box-sizing ?
Bueno, sabiendo que nuestro modelo de caja tiene uno por defectobox-sizing: content-box:
Analicemos el siguiente código.
.Child__container{width:100%;box-sizing:// Analizaremos esta propiedad;border: solid blue 10px;}
En caso de:
box-sizing: content-box = se suman al ancho los bordes, paddings y/o margins, y se rebalsa del contendor como un vaso de agua lleno.
box-sizing: border-box = En caso de asignarle estilos de bordes, paddings y/o margins, los restara del ancho que ya se le asigno y conservara su tamaño desesado.
Es bastante útil para cuando estés creando componentes que tienen varios elementos dentro como por ejemplo un menú que tiene listas, botones, logos, etc.
Si vas al "curso definitivo de html y css" y el "curso práctico de html y css" donde se hace un réplica de la página de google y wikipedia, hay partes donde es más conveniente usarlo
Algunas etiquetas
box sizing: border box→ Hace que el contenido entre en la caja, en el ancho y largo que se puso, haciendo que el padding y el border tambièn se incluyan
border:1px, solid, hotpink →Pide tres valores el tamaño en pixeles(1px), tipo de border (solid), color (hotpink)
margin → Es la separación entre los elementos
<!DOCTYPE html><html lang="es"><head><meta charset="UTF-8"><meta name="Description" content="Extended Description"><meta name="robots" content="index,follow"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Modelo de Caja</title><style> div { background-color: plum;width: 200px;height: 200px;padding: 20px;/* Sin box-sizing: border-box =>`width = content` *//* Con box-sizing: border-box =>`width = content + padding + border` */ box-sizing: border-box;border: 10px solid hotpink;/* Los márgenes en vertical hace que colapsen en más de un box y no se suman */margin: 20px;}</style></head><body><div>Platzi</div><div>Es lo máximo
</div></body></html>
El modelo de caja es muy importante comprenderlo y tenerlo claro, ya que en los navegadores, todo se hace a partir de cajas.🟩
Hola, como andas? Que programa usaste para tomar notas? :)
lautaronicolasalduino: Bien y tú? Uso la app Samsung Notes :)
Notes:
La representacion de nuestras etiquetas en el navegador son cajas
Todas las cajas de nuestro navegador tienen las siguientes propiedades:
margin
padding
border
content → es a este a quien le podemos colocar width y height
En las devTools de los navegadores podemos encontrar hasta el final de la seccion de estilos una representacion de este modelo de caja
El padding es una medida “interna” de la caja y no se relaciona con otros elementos
La propiedad box-sizing: border-box nos permite que el width de un elemento se calcule sumando tanto el padding como el contenido. De esta manera nuestro elemento respetara la dimension que definimos
El margin es quien nos da la separacion entre nuestros diferentes elementos.
Las margenes de CSS de manera vertical tienden a colapsarse