ยฟQuรฉ es el Box Sizing en CSS? ๐ค
ยกHola, gente bonita! ๐
Quizรกs te๋ encontrado en muchos ejemplos de CSS la siguiente regla๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค:
*,
*::after,
*::before {
box-sizing: border-box;
}
Te preguntaras a que se refiere, o porque siempre lo colocan en los estilos. Pues bien, en este articulo te lo explicare hasta con matemรกticasโฆ๐คญ
๐งยฟQuรฉ es el ์์ ํฌ๊ธฐ ์กฐ์ ?
La propiedad box-sizing (tamaรฑo de caja) establece como se calcula el ancho y alto total de un elemento. Recuerda que en HTML todos los elementos son una caja y es muy importante comprender que es el box-model (modelo de caja) antes de pasar con el box-sizing.
La propiedad box-sizing tiene dos valores posibles:
content-box
Y border-box
. El primero es el valor por defector asรญ que no es necesario colocarlo. Vamos a explicarlo con unos ejemplosโฆ๐ฆ์ฝํ ์ธ ์์
์ ์
box-1
ํ
๊ณ ์ ์ width
๋ 100px
y ์ ์ height
๋ 120px
si yo aรฑado un padding de 5px
y un border de 2px
ahora la caja va a medir 114px de ancho por 134px de alto. Esto es porque le estoy sumando el padding y border..box-1 {
width: 100px;
height: 120px;
padding: 5px;
border: 2px solid blue;
box-sizing: content-box;
}
Esto hace que la caja se vea mรกs grande. Para llegar a estas medida total, el navegador hace el siguiente calculo:
์ต์ข ๋๋น: ๋๋น + (์ผ์ชฝ ํจ๋ฉ + ์ค๋ฅธ์ชฝ ํจ๋ฉ) + (์ค๋ฅธ์ชฝ ํ ๋๋ฆฌ + ์ผ์ชฝ ํ ๋๋ฆฌ)
์ต์ข ๋๋น: 100px + (2 * 5px) + (2 * 2px) = 114px
์ต์ข ๋์ด: ๋์ด + (ํจ๋ฉ-ํ + ํจ๋ฉ-ํ๋จ) + (๋ณด๋-ํ + ๋ณด๋-ํ๋จ)
์ต์ข ๋์ด: 120px + (2 * 5px) + (2 * 2px) = 134px
El comportamiento por defecto de los navegadores al calcular el ancho y alto de un elemento es aplicar la anchura y altura al รกrea de contenido, sin tener en cuenta el borde y padding.
โ ํ ๋๋ฆฌ ์์
El border box sirve para evitar lo anterior, sit tu necesitas que el elemento mida exactamente lo que especificaste en el width y height (100px x 120px each each), con el valor border-box lo puedes hacer. Border box hace que los elementos mantengan su tamaรฑo y se usa precisamente para que el box model no se rompa.
.box-2 {
width: 100px;
height: 120px;
padding: 5px;
border: 2px solid blue;
box-sizing: border-box;
}
์ด๋ฏธ์ง ํฌ๊ธฐ๋ 86ํฝ์ , 106ํฝ์ , ์ต๋ 106ํฝ์ , ๋๋น y ๋์ด(100ํฝ์ x 120ํฝ์ )๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
86px x 106px๋ก ํ๋งคํ์๊ฒ ์ต๋๊น? ๐ฅด. Esto porque en lugar de sumar, el padding y border se restan del ancho y del alto para que despuรฉs la suma total sean las medidas exactas, este calculo lo hace el navegador de la siguiente manera:
๋๋น - (์ผ์ชฝ ํจ๋ฉ + ์ค๋ฅธ์ชฝ ํจ๋ฉ) - (์ค๋ฅธ์ชฝ ํ ๋๋ฆฌ + ์ผ์ชฝ ํ ๋๋ฆฌ)
100px - (2 * 5px) - (2 * 2px) = 86px
86px + 10px ํจ๋ฉ + 4px ํ ๋๋ฆฌ = 100px
๋์ด - (ํจ๋ฉ ์๋จ + ํจ๋ฉ ํ๋จ) - (๋ณด๋ ์๋จ + ๋ณด๋ ํ๋จ)
120px - (2 * 5px) - (2 * 2px) = 106px
106px + 10px ํจ๋ฉ + 4px ํ ๋๋ฆฌ = 120px
Las diferencias entre content-box y border-box se pueden ver con la siguiente imagen. En el content box el padding y border del elemento se dibujan por fuera de la anchura y altura(se suman), mientras que en border-box, el padding y border se dibujan dentro del ancho y alto(se restan).
โ๏ธ์ด๊ธฐํ
Para no estar aplicando a cada uno de los elementos la propiedad box-sizing, podemos establecerlo de manera general, es decir, hacemos un "reset"de tal forma que a todos se les aplique el valor border-box, pero podemos hacerlo de dos ๊ตฌ๋ถ ํ์:
1๏ธโฃ๋ฒ์ฉ ๋ฐ์ค ์ฌ์ด์ง
Esta regla lo que hace es aplicar la propiedad box-sizing con su valor border-box a todos los elementos y a todos los pseudoelementos (before y after):
*,
*::after,
*::before {
box-sizing: border-box;
}
2๏ธโฃ์์์ ํตํ ๋ฒ์ฉ ์์ ํฌ๊ธฐ ์กฐ์
Este รบltimo reset se thinka mejor que la anterior. Por ejemplo si tienes un componente que solo fue diseรฑado para trabajar con el content-box entonces esta regla nos permite facilitar dicho cambio:
html{
box-sizing: border-box;
}
*,
*::after,
*::before {
box-sizing: inherit;
}
ํ๊ท:
Leer์ ์ํ๐ฆธโโ๏ธ
Mi redes sociales donde comparto notas de cรณdigo:
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(ยฟQuรฉ es el Box Sizing en CSS? ๐ค), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/lupitacode/que-es-el-box-sizing-en-css-2pi9ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค