Box sizing в CSS — что это?

Box sizing в CSS — что это? - коротко

Свойство box-sizing задаёт, какие части элемента учитываются при расчёте его ширины и высоты. При значении border-box в размер включаются padding и граница, а при content-box учитывается только содержимое.

Box sizing в CSS — что это? - развернуто

Box‑sizing — это CSS‑свойство, которое определяет, какие части коробки элемента учитываются при вычислении её ширины и высоты. По умолчанию браузер использует модель «content‑box», когда в заданные размеры включается только содержимое, а границы и внутренний отступ (padding) добавляются сверху. Это приводит к тому, что реальная визуальная ширина элемента оказывается больше, чем указано в свойствах width/height, что часто усложняет построение макетов.

Существует два основных значения свойства:

  • content-box – сохраняет традиционное поведение, где width/height описывают только контент. Границы и padding увеличивают итоговый размер блока.
  • border-box – заставляет браузер включать padding и границы в указанные размеры. То есть width/height становятся окончательной границей визуального элемента, а внутреннее пространство распределяется внутри этой границы.

Дополнительные варианты, такие как padding-box, поддерживаются лишь в отдельных браузерах и не являются частью стандарта, поэтому их применение рекомендуется ограничить экспериментальными задачами.

Переход к модели border‑box упрощает адаптивную верстку: при изменении ширины контейнера элементы сохраняют ожидаемые пропорции, а расчёты отступов становятся предсказуемыми. Для глобального применения часто используют следующий приём:

*, *::before, *::after {
 box-sizing: border-box;
}

Эта запись гарантирует, что все элементы, а также их псевдоэлементы, будут учитывать padding и border в заданных размерах, что устраняет необходимость постоянного пересчёта при добавлении отступов.

Важно помнить, что box-sizing влияет только на расчёт размеров, но не меняет визуальное отображение границ и отступов. Свойства margin остаются внешними и по‑прежнему добавляются к общей ширине и высоте элемента, поэтому при планировании расположения блоков их следует учитывать отдельно.

Совместимость свойства охватывает все современные браузеры, включая мобильные версии, а также старые версии Internet Explorer 8 и новее. Для поддержки более старых браузеров иногда добавляют префиксы, но в практике они уже почти не требуются.

Практический совет: при работе с сетками, карточками и другими компонентами, где важна точность размеров, сразу задавайте border‑box на уровне всего документа. Это экономит время, избавляет от лишних расчётов и делает код более читаемым. Если же требуется отдельный элемент с традиционной моделью, достаточно переопределить свойство только для него. Такой подход обеспечивает гибкость и предсказуемость поведения всех элементов страницы.