Загрузка...

Box Sizing в CSS

Вы уже знаете, что padding и border могут сделать бокс шире объявленного width. box-sizing выбирает правило этой арифметики: width — это «только content» или «content плюс padding плюс border»?

Две модели одним взглядом

📊 content-box против border-box

Модель Что покрывают width / height Повседневный эффект
content-box (по умолчанию) Только content Padding и border добавляются снаружи объявленного размера
border-box Content + padding + border Объявленный размер — внешний край border; content сжимается
Margin Не входит ни в одну Внешний зазор остаётся отдельным от box-sizing

По умолчанию: content-box

В модели по умолчанию width: 200px измеряет content. Добавьте padding и border — окрашенный бокс растёт.

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

css
CSS Code
.panel-content {
box-sizing: content-box;
width: 200px;
padding: 20px;
border: 4px solid #0f766e;
background-color: #ccfbf1;
}
/* Content 200px + padding + border → общая ширина больше */

Перейдите на border-box

С border-box тот же width: 200px включает padding и border. Внешний край ближе к 200px; область content становится меньше.

Размер border-box

css
CSS Code
.panel-border {
box-sizing: border-box;
width: 200px;
padding: 20px;
border: 4px solid #0f766e;
background-color: #99f6e4;
}
/* Внешний border-box целится в 200px; content сжимается */

Одни числа, разный след

Поставьте обе модели рядом с одинаковыми width, padding и border.

Сравнить две модели

css
CSS Code
.contenty {
box-sizing: content-box;
width: 180px;
padding: 16px;
border: 6px solid #b45309;
background-color: #fef3c7;
}

.borderish {
box-sizing: border-box;
width: 180px;
padding: 16px;
border: 6px solid #b45309;
background-color: #fde68a;
}
/* Одинаковые объявления; .contenty занимает больше горизонтального места */

Почему командам нравится border-box

Когда карточка должна точно заполнить колонку — например width: 100% с padding — border-box не даёт ей вылезти за родителя.

Карточка, дружелюбная к колонке

css
CSS Code
.card {
box-sizing: border-box;
width: 100%;
padding: 1.25rem;
border: 1px solid #cbd5e1;
background-color: #ffffff;
}

Спокойная глобальная привычка

Многие таблицы стилей один раз ставят border-box на всё, чтобы повседневный расчёт ширины был предсказуемым. Margin по-прежнему снаружи.

Универсальная привычка border-box

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

Попробуйте сами

  1. Соберите .panel-content с width: 200px, padding и border при content-box.
  2. Скопируйте в .panel-border с box-sizing: border-box — смотрите, как внешний размер ближе к 200px.
  3. Поставьте .contenty и .borderish рядом с теми же числами.
  4. Сделайте карточку width: 100% с padding; переключайте box-sizing и смотрите, какая вылезает.
  5. Попробуйте универсальную привычку * на маленькой демо-странице.

Частые ошибки

  • Думать, что border-box включает ещё и margin (нет)
  • Забывать, что по умолчанию content-box, пока вы не смените
  • Ждать, что outline последует за box-sizing (outline снаружи и по-прежнему не занимает место в раскладке)
  • Писать width: 100% с жирным padding при content-box и удивляться переполнению
  • Мешать проценты, не зная, какая модель размера активна

Кратко

  • По умолчанию box-sizing: content-box измеряет content; padding и border добавляются
  • border-box держит padding и border внутри объявленной ширины/высоты
  • Margin вне обеих моделей
  • Border-box часто упрощает ширины колонок и карточки width: 100%
  • Универсальный сброс border-box — обычная спокойная привычка

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
8
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху