В чем разница между box-sizing: content-box и border-box

Ответ

box-sizing определяет, как рассчитываются размеры элемента.

content-box (по умолчанию):

  • width и height задают размер только контента.
  • Padding и border добавляются к общей ширине/высоте.
div {
  box-sizing: content-box;
  width: 100px;
  padding: 10px;
  border: 5px solid;
  /* Фактическая ширина = 100 + 20 + 10 = 130px */
}

border-box:

  • width и height включают padding и border.
  • Удобно для точного контроля размеров.
div {
  box-sizing: border-box;
  width: 100px;
  padding: 10px;
  border: 5px solid;
  /* Фактическая ширина = 100px (контент: 70px) */
}

Чаще используют border-box для упрощения вёрстки.

Ответ 18+ 🔞

А, слушай, про эту вашу box-sizing! Ну, классика же, пиздец. Сидишь, верстаешь, вроде всё по макету, а тут — бац! — и блок на 30 пикселей шире, сука. А всё почему? Потому что мозги на content-box по умолчанию стоят, вот почему.

content-box (это как оно из коробки): Представь, ты заказал пиццу шириной 100 пикселей. Это сам корж, контент. А потом ты, жадная жопа, решил добавить сырную кромку (это border) и ещё воздушную подушку в коробке (padding). Так вот, с content-box твоя итоговая пицца с доставкой будет уже не 100, а, блядь, 130 пикселей! Потому что бордюр и отступы — сверху.

div {
  box-sizing: content-box; /* Дефолтное, ебаное состояние */
  width: 100px; /* Сам корж */
  padding: 10px; /* Воздух в коробке */
  border: 5px solid; /* Сырная кромка */
  /* Итог на тарелке: 100 + 20 + 10 = 130px. Охуеть, да? */
}

А теперь border-box (здравый смысл): А вот это — магия, ёпта. Ты говоришь: «Хочу пиццу, чтобы итого 100 пикселей было ВСЁ ВМЕСТЕ: и корж, и кромка, и коробка». И CSS такой: «Окей, мудила, понял». Ширина width становится лимитом на всё про всё.

div {
  box-sizing: border-box; /* Включаем режим «не еби мозг» */
  width: 100px; /* ВСЯ хуйня, включая бордюры и отступы */
  padding: 10px; /* Отступы ВХОДЯТ в эти 100px */
  border: 5px solid; /* И бордюры тоже */
  /* Итог на тарелке: ровно 100px. А сам контент внутри сожмётся до 70px. Красота, бля! */
}

Короче, все адекватные люди в начале проекта пишут * { box-sizing: border-box; } и живут спокойно. А то на content-box можно с ума сойти, честное слово. В рот меня чих-пых, сколько времени на этой хуйне убил, пока не понял!