Свойство
box-sizing
Определяет, что измеряют width и height — только содержимое или весь блок вместе с полями и рамкой.
Пример
Оба блока шириной 200px, но второй с border-box таким и остаётся, а первый вырастает на поля и рамку:
<div class="box">content-box</div>
<div class="box box--border">border-box</div>.box {
width: 200px;
margin-bottom: 0.5rem;
padding: 20px;
border: 5px solid;
}
.box--border {
box-sizing: border-box;
}Результат
Синтаксис
box-sizing: content-box | border-box;- Начальное значение
- content-box
- Применяется к
- всем элементам, у которых действуют width и height
- Наследуется
- нет
- Анимируется
- дискретно
- Вычисляемое значение
- как указано
Значения
content-boxwidthиheightзадают размер только содержимого. Поля и рамка добавляются сверху. Значение по умолчанию.border-boxwidthиheightзадают размер вместе с полями и рамкой. Содержимое сжимается, чтобы всё поместилось.
Как понять
С content-box итоговая ширина считается так: width + padding слева и справа + border слева и справа. Для блока из примера: 200 + 40 + 10 = 250 пикселей.
С border-box итоговая ширина равна width, а место под содержимое — то, что осталось: 200 − 40 − 10 = 150 пикселей. Так проще думать о раскладке: если колонка занимает 50%, она занимает ровно 50%, какие бы поля у неё ни были.
Примеры
Для всех элементов
Самое частое использование — одно правило в начале стилей:
*,
*::before,
*::after {
box-sizing: border-box;
}Две колонки по 50%
С border-box две колонки по 50% с полями помещаются в строку. С content-box вторая уехала бы вниз:
<div class="row">
<div class="col">Левая</div>
<div class="col">Правая</div>
</div>.col {
box-sizing: border-box;
display: inline-block;
width: 50%;
padding: 1rem;
border: 2px solid;
}
.row {
font-size: 0; /* убрать пробел между inline-block */
}
.col {
font-size: 1rem;
}Результат
Подсказки
box-sizingне наследуется. Правило* { box-sizing: border-box; }не затрагивает псевдоэлементы — поэтому в него добавляют::beforeи::after.marginв размер не входит ни при каком значении.- Некоторые элементы форм (
input,select,button) в разных браузерах по умолчанию используют разные модели — общее правилоborder-boxих выравнивает.
Поддержка браузерами
| Возможность | Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | Samsung Internet | Opera |
|---|---|---|---|---|---|---|---|---|
| box-sizing | 10 1 2 | 12 3 | 29 4 | 5.1 5 | 18 6 7 | 6 8 | 1.0 9 10 | 7 |
| border-box | 1 | 12 | 1 | 3 | 18 | 2 | 1.0 | 15 |
| content-box | 1 | 12 | 1 | 3 | 18 | 2 | 1.0 | 15 |
Примечания
- Chrome: С префиксом -webkit- — с версии 1.
- Chrome:
box-sizingне учитывается, когда высоту возвращаетwindow.getComputedStyle(). - Edge: С префиксом -webkit- — с версии 12.
- Firefox: С префиксом -webkit- — с версии 49.
- Safari: С префиксом -webkit- — с версии 3.
- Chrome Android: С префиксом -webkit- — с версии 18.
- Chrome Android:
box-sizingне учитывается, когда высоту возвращаетwindow.getComputedStyle(). - Safari iOS: С префиксом -webkit- — с версии 1.
- Samsung Internet: С префиксом -webkit- — с версии 1.0.
- Samsung Internet:
box-sizingне учитывается, когда высоту возвращаетwindow.getComputedStyle().
Яндекс Браузер работает на Chromium и поддерживает то же, что Chrome той же версии. Данные: MDN browser-compat-data 8.1.2, обновлено 17 сентября 2026 г.