Что такое размер окна: border-box в CSS?
 
        В CSS есть свойство box-sizing, позволяющее определить, как вычисляется ширина и высота элемента. Многие сбросы CSS изменяют модель блока по умолчанию с content-box на border-box, чтобы упростить работу с макетами. Но что box-sizing: border-box на самом деле делает? В этой статье мы рассмотрим это box-sizing свойство и то, как оно влияет на макет ваших веб-страниц.
Модель коробки по умолчанию
По умолчанию установлена блочная модель content-box. Это означает, что ширина и высота элемента рассчитываются на основе содержимого внутри элемента. Если вы добавите к элементу отступы или границы, эти значения будут добавлены к окончательной ширине элемента. В этом примере у нас есть красный прямоугольник шириной 200 пикселей, высотой 200 пикселей, отступом 20 пикселей и черной рамкой, установленной на 5 пикселей.
<div class="box"></div>.box {
  background-color: #ff0000;
  width: 200px;
  height: 200px;
  padding: 20px;
  border: 5px solid black;
}Если вы щелкнете правой кнопкой мыши по div элементу и проверите его в инструментах разработчика, вы увидите, что ширина поля составляет 250 пикселей, а высота — 250 пикселей.
 
        Это связано с тем, что к ширине и высоте поля добавляются отступы и границы. Общая ширина и высота теперь составляют 250 на 250 пикселей вместо 200 пикселей.
Когда вы создаете макеты, вы должны не забыть рассчитать отступы и границы по ширине и высоте элемента. Это может быть немного болезненно и привести к неожиданным результатам.
Чтобы избежать этого, используйте box-sizing свойство, установленное в border-box.
Как работать с box-sizing: border-box?
Если для box-sizing свойства установлено значение border-box, ширина и высота элемента рассчитываются на основе содержимого, заполнения и границы элемента.
В этом пересмотренном примере мы используем * селектор, чтобы установить box-sizing свойство border-box для всех элементов на странице. Это известно как глобальный сброс CSS.
<div class="box"></div>*,
*:before,
*:after {
  box-sizing: border-box;
}
.box {
  background-color: #ff0000;
  width: 200px;
  height: 200px;
  padding: 20px;
  border: 5px solid black;
}Теперь, когда вы проверите элемент box, вы увидите, что ширина и высота установлены на 200 пикселей, как мы указали в таблице стилей. Браузер учитывает добавленные отступы и границы и соответствующим образом настраивает поле содержимого.
 
        Что делают селекторы *, *:before и *:after?
Причина, по которой мы используем селекторы *, *:before и *:after, заключается в том, чтобы гарантировать, что значение border-box применяется ко всем элементам на странице.
Селектор * выбирает все элементы, селектор *:before выбирает все элементы до содержимого и селектор *:after выбирает все элементы после содержимого.
Заключение
Необходимость помнить о расчете отступов и границ по ширине и высоте ваших элементов может быть хлопотной и привести к неожиданным результатам в ваших макетах.
Установка box-sizing свойства border-box для всех элементов на странице с помощью селекторов и сэкономит вам много времени на отладку и исправление проблем с макетом в CSS.