Перейти к основному содержимому

Box Sizing в CSS

Ширину и высоту элемента можно рассчитать двумя способами, учитывая отступы и рамки или не учитывая их, и свойство CSS box-sizing выбирает, какой из них применяется.

Если его не задавать, браузер не включает их в указанное вами значение и добавляет потом:

  • фактическая ширина = width + padding + border
  • фактическая высота = height + padding + border

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

Пример

Оба элемента <div> запрашивают одинаковые ширину и высоту, но отображаются в разных размерах: только у второго есть дополнительный отступ, который его увеличивает.

Prompt
Создай два элемента div, оба с width: 300px и height: 100px. У первого div сплошная синяя граница 1px и без отступа. У второго div сплошная красная граница 1px и отступ (padding) 50px. Покажи, как они получаются разного размера, потому что отступ добавляется к width/height.
Output: complete HTML page "}, {

Решение box-sizing в CSS

С помощью box-sizing отступы и рамка могут стать частью объявленных вами общих ширины и высоты. Это делает значение box-sizing: border-box;, которое оставляет их внутри расчёта.

Результат настолько лучше, что многие разработчики хотели бы применять его к каждому элементу на своих страницах. Браузеры уже применяют box-sizing: border-box; ко многим элементам форм, хотя и не ко всем, поэтому поля ввода и текстовые области могут отличаться при width: 100%;.

Задавать box-sizing: border-box; для всех элементов и безопасно, и разумно.

Пример

Добавьте box-sizing: border-box; к этим двум элементам <div>, и теперь они отображаются в одинаковом размере.

Prompt
Создай два элемента div, оба с width: 300px, height: 100px и box-sizing: border-box. У первого div сплошная синяя граница 1px. У второго div отступ (padding) 50px и сплошная красная граница 1px. Оба div должны выглядеть одинакового размера, потому что box-sizing: border-box включает отступы и границу в width/height.
Output: complete HTML page "}, {

Универсальный box-sizing

Чтобы охватить всю страницу, задайте box-sizing: border-box; для универсального селектора *.

Prompt
Используй универсальный селектор (*), чтобы применить box-sizing: border-box ко всем элементам на странице. Добавь два элемента div с width: 300px, height: 100px, разными отступами (padding) и границами (border), чтобы показать, что их общий размер остаётся одинаковым.
Output: complete HTML page "}, {