box-sizing
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
CSS ÑвойÑÑво box-sizing опÑеделÑÐµÑ ÐºÐ°Ðº вÑÑиÑлÑеÑÑÑ Ð¾Ð±ÑÐ°Ñ ÑиÑина и вÑÑоÑа ÑлеменÑа.
ÐнÑеÑакÑивнÑй пÑимеÑ
box-sizing: content-box;
width: 100%;
box-sizing: content-box;
width: 100%;
border: solid #5b6dcd 10px;
padding: 5px;
box-sizing: border-box;
width: 100%;
border: solid #5b6dcd 10px;
padding: 5px;
<section id="default-example">
<div id="example-element-parent">
<p>Parent container</p>
<div class="transition-all" id="example-element">
<p>Child container</p>
</div>
</div>
</section>
#example-element-parent {
width: 220px;
height: 200px;
border: solid 10px #ffc129;
margin: 0.8em;
}
#example-element {
height: 60px;
margin: 2em auto;
background-color: rgba(81, 81, 81, 0.6);
}
#example-element > p {
margin: 0;
}
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² блоковой модели CSS ÑиÑина и вÑÑоÑа, коÑоÑÑÑ Ð²Ñ Ð·Ð°Ð´Ð°ÑÑе ÑлеменÑÑ Ð¿ÑименÑеÑÑÑ ÑолÑко Ð´Ð»Ñ ÐºÐ¾Ð½ÑенÑа ÑлеменÑа. ÐÑли Ñ ÑлеменÑа еÑÑÑ Ð³ÑаниÑа или внÑÑÑенний оÑÑÑÑп, Ñо они добавлÑÑÑÑÑ Ðº ÑиÑине и вÑÑоÑе, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¾ÑобÑажаемÑй на ÑкÑане ÑазмеÑ. ÐÑо знаÑиÑ, ÑÑо когда Ð²Ñ Ð²ÑÑÑавлÑеÑе ÑиÑÐ¸Ð½Ñ Ð¸ вÑÑоÑÑ, вам пÑидÑÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ Ð·Ð½Ð°Ñение, пÑи добавлении гÑÐ°Ð½Ð¸Ñ Ð¸ оÑÑÑÑпов. ÐапÑимеÑ, еÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ ÑеÑÑÑе блока Ñ width: 25%; , и Ñ ÐºÐ°ÐºÐ¾Ð³Ð¾-нибÑÐ´Ñ Ð¸Ð· ниÑ
еÑÑÑ Ð³ÑаниÑа или внÑÑÑенний оÑÑÑÑп Ñлева или ÑпÑава, Ñо по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¸ не помеÑÑÑÑÑÑ Ð½Ð° одной ÑÑÑоке.
СвойÑÑво box-sizing Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑ ÑÑо поведение:
content-boxдаÑÑ ÑÑандаÑÑное поведение ÑвойÑÑва box-sizing. ÐÑли Ð²Ñ Ð²ÑÑÑавиÑе ÑлеменÑÑ ÑиÑÐ¸Ð½Ñ 100 пикÑелей, Ñо ÑиÑина его конÑенÑа бÑÐ´ÐµÑ 100 пикÑелей, а ÑиÑина гÑÐ°Ð½Ð¸Ñ Ð¸ внÑÑÑÐµÐ½Ð½Ð¸Ñ Ð¾ÑÑÑÑпов пÑи ÑендеÑе бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð° к ÑиналÑной ÑиÑине, Ð´ÐµÐ»Ð°Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑиÑе ÑÑа пикÑелей.border-boxговоÑÐ¸Ñ Ð±ÑаÑзеÑÑ ÑÑиÑÑваÑÑ Ð»ÑбÑе гÑаниÑÑ Ð¸ внÑÑÑенние оÑÑÑÑÐ¿Ñ Ð² знаÑениÑÑ , коÑоÑÑе Ð²Ñ ÑказÑваеÑе в ÑиÑине и вÑÑоÑе ÑлеменÑа. ÐÑли Ð²Ñ Ð²ÑÑÑавиÑе ÑлеменÑÑ ÑиÑÐ¸Ð½Ñ 100 пикÑелей, Ñо ÑÑи 100 пикÑелей бÑдÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð² ÑÐµÐ±Ñ Ð³ÑаниÑÑ Ð¸ внÑÑÑенние оÑÑÑÑпÑ, а конÑÐµÐ½Ñ ÑожмÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð²ÑделиÑÑ Ð´Ð»Ñ Ð½Ð¸Ñ Ð¼ÐµÑÑо. ÐбÑÑно ÑÑо ÑпÑоÑÐ°ÐµÑ ÑабоÑÑ Ñ ÑазмеÑами ÑлеменÑов.
ÐÑимеÑание:
ЧаÑÑо вÑÑÑавление box-sizing: border-box полезно Ð´Ð»Ñ ÑазмеÑÐµÐ½Ð¸Ñ ÑлеменÑов. Ðно ÑилÑно ÑпÑоÑÐ°ÐµÑ ÑабоÑÑ Ñ ÑазмеÑами ÑлеменÑов, и как пÑавило ÑÑÑÑанÑÐµÑ ÑÑд подводнÑÑ
камней, на коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе наÑкнÑÑÑÑÑ, ÑазмеÑÐ°Ñ ÐºÐ¾Ð½ÑенÑ. С дÑÑгой ÑÑоÑонÑ, иÑполÑзÑÑ position: relative или position: absolute, box-sizing: content-box позволÑÐµÑ Ð¿Ð¾Ð·Ð¸ÑионнÑм знаÑениÑм бÑÑÑ Ð·Ð°Ð²Ð¸ÑимÑми ÑолÑко Ð¾Ñ ÐºÐ¾Ð½ÑенÑа, а не Ð¾Ñ Ð³ÑÐ°Ð½Ð¸Ñ Ð¸ оÑÑÑÑпов, ÑÑо иногда желаÑелÑно.
СинÑакÑиÑ
ÐÐ»Ñ ÑвойÑÑва box-sizing ÑÑÑанавливаеÑÑÑ ÐµÐ´Ð¸Ð½ÑÑвенное клÑÑевое Ñлово из ÑпиÑка знаÑений ниже.
ÐнаÑениÑ
content-box-
ÐÑо знаÑение по ÑмолÑаниÑ, опÑеделÑнное в CSS ÑÑандаÑÑе. СвойÑÑва width и height вклÑÑаÑÑ Ð¸ÑклÑÑиÑелÑно конÑенÑ, и не вклÑÑаÑÑ padding и border. ÐапÑимеÑ
.box {width: 350px; border: 10px solid black;}бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ ÑиÑÐ¸Ð½Ñ 370 пикÑелей.РазмеÑÑ ÑлеменÑа ÑаÑÑÑиÑÑваÑÑÑÑ ÑледÑÑÑим обÑазом: width = ÑиÑина конÑенÑа, и height = вÑÑоÑа конÑенÑа. (ÐÑаниÑÑ Ð¸ внÑÑÑенние оÑÑÑÑÐ¿Ñ Ð½Ðµ вклÑÑаÑÑÑÑ Ð² вÑÑиÑление.) border-box-
СвойÑÑва width и height вклÑÑаÑÑ ÐºÐ¾Ð½ÑенÑ, внÑÑÑенний оÑÑÑÑп и гÑаниÑÑ, но не вклÑÑаÑÑ Ð²Ð½ÐµÑний оÑÑÑÑп. ÐамеÑÑÑе, ÑÑо внÑÑÑенний оÑÑÑÑп и гÑаниÑа бÑдÑÑ Ð²Ð½ÑÑÑи блока. ÐапÑимеÑ,
.box {width: 350px; border: 10px solid black;}бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð±ÑÑÑ ÑиÑÐ¸Ð½Ñ 350 пикÑелей, а ÑиÑина конÑенÑа ÑоÑÑÐ°Ð²Ð¸Ñ 330 пикÑелей. Ð Ð°Ð·Ð¼ÐµÑ ÐºÐ¾Ð½ÑенÑа не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑиÑаÑелÑнÑм, минималÑное знаÑение - 0, поÑÑомÑborder-boxневозможно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑкÑÑÑÐ¸Ñ ÑлеменÑа.РазмеÑÑ ÑлеменÑа ÑаÑÑÑиÑÑваÑÑÑÑ ÑледÑÑÑим обÑазом: width = гÑаниÑа + внÑÑÑенний оÑÑÑÑп + ÑиÑина конÑенÑа, и height = гÑаниÑа + внÑÑÑенний оÑÑÑÑп + вÑÑоÑа конÑенÑа.
ФоÑмалÑнÑй ÑинÑакÑиÑ
box-sizing =
content-box |
border-box
ÐÑимеÑание:
ÐнаÑение padding-box ÑÑÑаÑело
ÐÑимеÑ
ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ ÐºÐ°Ðº ÑазнÑе знаÑÐµÐ½Ð¸Ñ box-sizing изменÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñй ÑÐ°Ð·Ð¼ÐµÑ Ð´Ð²ÑÑ
иденÑиÑнÑÑ
ÑлеменÑов.
HTML
<div class="content-box">Content box</div>
<br />
<div class="border-box">Border box</div>
CSS
div {
width: 160px;
height: 80px;
padding: 20px;
border: 8px solid red;
background: yellow;
}
.content-box {
box-sizing: content-box;
/* Total width: 160px + (2 * 20px) + (2 * 8px) = 216px
Total height: 80px + (2 * 20px) + (2 * 8px) = 136px
Content box width: 160px
Content box height: 80px */
}
.border-box {
box-sizing: border-box;
/* Total width: 160px
Total height: 80px
Content box width: 160px - (2 * 20px) - (2 * 8px) = 104px
Content box height: 80px - (2 * 20px) - (2 * 8px) = 24px */
}
РезÑлÑÑаÑ
СпеÑиÑикаÑии
| Specification |
|---|
| CSS Box Sizing Module Level 3> # box-sizing> |
| ÐаÑалÑное знаÑение | content-box |
|---|---|
| ÐÑименÑеÑÑÑ Ðº | вÑе ÑлеменÑÑ, коÑоÑÑе могÑÑ Ð¸Ð¼ÐµÑÑ ÑиÑÐ¸Ð½Ñ Ð¸ вÑÑоÑÑ |
| ÐаÑледÑеÑÑÑ | Ð½ÐµÑ |
| ÐбÑабоÑка знаÑÐµÐ½Ð¸Ñ | как Ñказано |
| Animation type | discrete |