Box Model
Last updated
Last updated
Todo en CSS tiene una caja alrededor, y comprender estas cajas es clave para poder crear diseΓ±os con CSS o para alinear elementos con otros elementos. En este artΓculo, echaremos un vistazo mΓ‘s de cerca al modelo de cajas en CSS con el que vas a poder crear diseΓ±os de compaginaciΓ³n mΓ‘s complejos con una comprensiΓ³n de cΓ³mo funciona y la terminologΓa relacionada.
Este modelo consta de 4 elementos, el content
, el padding
, el border
y el margin
. y en le caso de que quieras visualizar cualquiera de estos elemntos de cualqueir pagina web, puedes hacerlo haciendo click derecho y luego selccionando inpeccionar elemento
.
El Γ‘rea del content (como su nombre lo dice) contiene el βcontenidoβ central a mostrar, es decir, un texto, una imagen, un video, etc. El contenido siempre es lo que queremos mostrarle al usuario. Esta Γ‘rea en muchas ocasiones tiene un color o imagen de fondo para hacerla mΓ‘s atractiva.
Como podemos observar en la imagen, el contenido es el Γ‘rea central de todo el elemento, de tal forma, que el siguiente elemento que lo rodea es el padding. El tamaΓ±o de esta Γ‘rea se puede modificar con las propiedades height
, width
, max-height
, max-width
, min-height
, min-width
.
Estos estilos, solo se pueden aplicar a los elementos de bloque. Los elementos en linea no tienen medidas, su tamaΓ±o lo determina el contenido
Es la separaciΓ³n entre una caja y las cajas adyacentes.
El margen es la ΓΊltima Γ‘rea del Box Model y se puede ver como una separaciΓ³n invisible o transparente que ayuda a separar un elemento de otro. Cuando definimos un color o imagen de fondo, este no se propaga a esta secciΓ³n.
Los mΓ‘rgenes siempre quedan fuera del modelo de caja, por lo que pueden utilizarse para crear espacio entre los elementos.
Los valores pueden ser positivos o negativos.
Un habito bastante comun es colocar al estilo global margin: 0;
y padding: 0;
, sin embargo es una mala practica, ya que queda todo bastante ilegible, puesto que te quedaria sin espacio entre los paragrafos y elementos de la pagina.
Otra mala practica que no es tan comun es utilizar margin: 0 auto;
para centra un elemento en la pagina, ya que por la cascada sobrescribira los margenes ya establecidos anteriormente, o cambia margenes que no es necesario cambiar. Por ello para centra un elemento lo recomendable es lo siguiente:
lo que si es recomendable es establecerle un margin: 0;
al body, puesto que por defecto los navegadores establecen un margen de 8 pixeles al body.
Es el Γ‘rea alrededor del contenido. El padding
es transparente.
El padding es una separaciΓ³n o espacio interior que existe entre el contenido y el borde de la caja, el cual se utiliza para dar una apariencia estΓ©tica mΓ‘s atractiva y que el contenido no este pegado al borde.
Cabe mencionar que el padding sigue siendo parte de la caja visible, por lo que, si tenemos una imagen o color de fondo, este se extenderΓ‘ a travΓ©s del padding.
Basicamente sirve para establecer una distancia entre el borde del bloque y el contenido de su interior. Es decir si establecemos un padding-top: 50px;
a una caja azul con texto en su interior el texto se situara 50px por debajo del margen superior de la caja, pero esos 50px seguiran siendo azule, al contrario que con margin.
El borde es la lΓnea que rodea la caja, es como la frontera que rodea al elemento, esta se utiliza para darle una apariencia estΓ©tica a la caja, pues nos permite dibujar una lΓnea de algΓΊn color, la lΓnea puede tener los siguientes estilos:
Las tres propiedades bΓ‘sicas para crear bordes son:
border-style
: sus valores son: [ none | hidden | solid | dotted | dashed | double | groove | ridge | inset | outset ]
border-width
: indica al navegador el tamaΓ±o del borde, normalmente, se utiliza el valor en pΓxeles para esta propiedad, por ejemplo, border-width: 5px
.
border-color
: por defecto, el valor utiliza el currentColor del texto. Sin embargo, preferimos definirlo aunque no sea necesario. Por ejemplo, border-color: red
.
La mayorΓa de los desarrolladores web no utilizan estas tres propiedades por separado. En su lugar, existe el shorthand: border
. Con este shorthand podemos escribir sΓ³lo border: solid 5px red
.
TambiΓ©n podemos controlar y dar un estilo diferente a cada parte de los bordes, por ejemplo:
La propiedad CSS border-radius
redondea las esquinas del borde exterior de un elemento. Puedes establecer un solo radio para hacer esquinas circulares, o dos radios para hacer esquinas elΓpticas.
Si recibe un solo valor impirmira una esfer y si recibe dos, imprimira una elipse
La propiedad CSS outline
es una forma reducida para establecer una o mΓ‘s de las propiedades individuales de contorno outline-style
, outline-width
y outline-color
en una sola declaraciΓ³n. En la mayorΓa de los casos el uso de este atajo es preferible y mΓ‘s conveniente.
Basicamente outline
crea un borde por el exterior del contenedor, es decir que el borde que establece esta fuera de Box model
.
Nota: al no ser parte del box model, si creas un borde muy grande, este se superpondra a los elementos que tenga a su alrededor.
Otra propiedad que ofrece outline
es outline-offset
. Esta propiedad establece a que distancia se situara el borde de la caja. En el caso de que sea negativo se meterΓ‘ dentro de la caja.
Aunque estas dos propiedades son similares, a veces se utilizan errΓ³neamente de forma intercambiable, aunque son muy diferentes. Entender sus diferencias puede ser beneficioso para los desarrolladores web.
El padding y el margin son dos elementos importantes en el diseΓ±o web que aΓ±aden espacio extra en diferentes lugares. Pero, ΒΏDΓ³nde y cuΓ‘ndo se debe utilizar uno en vez del otro?
Para el padding, puedes utilizarlo en las siguientes situaciones:
Cuando no quieras que el contenido toque los bordes del contenedor.
Cuando quiera aumentar el tamaΓ±o de un bloque de contenido sin que el propio contenido sea mΓ‘s grande.
Cuando se necesita espacio entre un elemento interior y la caja padre.
Cuando quieras que el background del elemento se muestre en el espacio generado. por ejemplo, si tienes dos divs, quieres que ambos divs (con diferente color de fondo) esten juntos, pero no quieres que sus textos se toquen.
Cuando quieras aumentar el tamaΓ±o del elemento. Ejemplo: si quieres aumentar el tamaΓ±o de un botΓ³n.
Para el margin, puedes utilizarlo en las siguientes situaciones:
Cuando necesite espacio alrededor de los elementos, como separar una imagen y la descripcion de la misma.
UtilizarΓas el margen para establecer la distancia entre elementos cercanos.
Cuando quiera centrar un elemento horizontalmente.
Cuando quieras mover un elemento hacia arriba, hacia abajo o de lado a lado.
Cuando quieras sobreponer elementos.
En resumen, si tu objetivos es separar tu caja de los elementos que le rodean tienes utilizar margin y si tu objetivos es aumentar el tamaΓ±o de la caja y separar los bordes del contenido tienes que utilizar padding
Nota: El margen sirve para aumentar la distancia entre hermanos. No esta pensado para aumentar la distancia entre un elemento hijo y su contenedor padre, para eso esta elpadding
.
La propiedad de CSS box-sizing
indica cΓ³mo se deben calcular las medidas de un elemento. Esto, que parece trivial, no lo es tanto ya que por defecto CSS considera que el ancho y alto de la caja es de las propiedades width
y height
. ΒΏQuΓ© significa esto? Pues que si le aΓ±ades un padding
o un border
el tamaΓ±o de renderizado de la caja serΓ‘: width + padding + border.
En el siguiente ejemplo tendrΓamos una caja de 290px de ancho ya que: 250px de width + (10px * 2) de padding + (10px * 2) de border
Aunque no la veamos ahΓ, la propiedad box-sizing
es la que se encarga de decir cΓ³mo debe ser ese cΓ‘lculo. En este caso estΓ‘ utilizando el valor content-box
, ya que es su valor por defecto.
El valor border-box
en el box-sizing
hace que el padding
y el border
pasen a formar parte del cΓ‘lculo del ancho de la caja y no lo suman posteriormente.
En el siguiente ejemplo tendrΓamos una caja de 250px de ancho ya el padding
y el border
ya forman parte del cΓ‘lculo del width
del elemento:
En este caso lo que hara box-sizing sera cambiar el with del contenedor para que asi el width del contenedor siga siendo 250px