Gernar
Frontend DeveloperCSS

Интервью-вопрос

Что такое box-sizing

box-sizing задает, что именно входит в CSS размеры элемента. Для интервью важно объяснить разницу между content-box и border-box и связать ее с реальными багами в верстке.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Что ответить про размер элемента при content-box?

У блока width: 300px, padding: 20px слева и справа, border: 2px слева и справа. Какую ширину он займет без учета margin?

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

box-sizing отвечает за то, как браузер связывает CSS-свойства width и height с реальным размером коробки элемента.

В стандартной модели content-box ширина и высота относятся только к контенту. Если добавить padding или border, элемент займет больше места.

В модели border-box заданные width и height уже включают контент, внутренние отступы и рамку. Внешняя коробка остается в заданном размере, а место для контента уменьшается.

Как это считать на простом примере

Допустим, у блока есть такие стили:

.card {
  width: 300px;
  padding: 20px;
  border: 2px solid #999;
}

При content-box итоговая ширина без margin будет 300 + 20 + 20 + 2 + 2 = 344px. Это часто ломает сетку, если вы рассчитывали, что карточка займет ровно 300px.

При border-box итоговая ширина останется 300px. Внутри этой ширины уже лежат padding и border, поэтому контентная область будет меньше: 300 - 40 - 4 = 256px.

Почему border-box часто ставят глобально

В интерфейсной верстке вам обычно удобно мыслить внешними размерами: колонка 50%, карточка 320px, input 100% ширины родителя. Если padding добавляется поверх этих размеров, легко получить горизонтальный скролл или перенос элемента на новую строку.

Поэтому в проектах часто используют reset:

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

Иногда выбирают inherit-подход:

html {
  box-sizing: border-box;
}

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

Важно добавить псевдоэлементы. Если декоративный ::before или ::after считается иначе, он может вылезти за блок или сдвинуть визуальный слой.

Как выбрать модель размера

Как рассуждать на практике

1Нужно, чтобы блок с padding оставался в заданной ширине контейнера?
Используйте border-box, особенно для карточек, колонок, форм и адаптивных блоков.
2Нужно задать точный размер внутренней контентной области?
Можно оставить content-box локально и явно учитывать padding и border.
3В проекте уже есть общий CSS reset?
Проверьте, распространяется ли он на псевдоэлементы. Иначе ::before и ::after могут дать неожиданный размер.
4Блок все равно переполняет контейнер?
Проверьте не только box-sizing. Причиной могут быть margin, min-width, длинный контент, fixed width и overflow.

Главная ловушка для ответа

Не говорите, что border-box учитывает все внешние размеры элемента. Это частая ошибка.

margin не входит в box-sizing. Он всегда находится снаружи коробки. Поэтому элемент с width: 100% и горизонтальным margin все равно может не поместиться в родителя.

Также border-box не отменяет проблемы с длинным текстом, картинками без max-width, фиксированными размерами и min-width. На интервью лучше сказать так: border-box делает расчет padding и border предсказуемым, но overflow нужно диагностировать отдельно.

Практический вывод для frontend

В ответе связывайте свойство не только с формулой, но и с реальными задачами. Например, при верстке формы input с width: 100% и padding при content-box может стать шире контейнера. На мобильном экране это дает горизонтальный скролл, обрезанную рамку поля или неаккуратное выравнивание с label. Безопаснее задать общий border-box или локально применить его к контролу, а затем отдельно проверить margin и длинный текст.

Хорошая короткая формулировка:

box-sizing задает, входят ли padding и border в width и height. По умолчанию content-box считает только контент, а border-box включает padding и border в заданный размер. Поэтому border-box часто используют в reset, чтобы интерфейсные блоки с padding не ломали сетку.

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

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Считать, что width всегда равен видимой ширине

    При content-box это неверно. Видимая ширина станет больше из-за padding и border. В адаптивной сетке такой блок может вылезти за родителя и создать горизонтальный скролл. Безопаснее сразу сказать, что итоговый размер зависит от выбранной модели.
  2. 2

    Забывать про margin

    margin не входит в box-sizing. Даже при border-box два элемента с большими внешними отступами могут не помещаться в строку. Если проблема во внешнем расстоянии, менять box-sizing недостаточно.
  3. 3

    Не включать псевдоэлементы в reset

    Если правило задано только для *, псевдоэлементы могут остаться в другом режиме или получить размер, который не совпадает с вашим ожиданием. Для декоративных рамок, бейджей и оверлеев это быстро дает сдвиги. Обычно пишут *, *::before, *::after.
  4. 4

    Использовать border-box как универсальное лекарство

    border-box делает расчет ширины удобнее, но не чинит длинные слова, картинки без ограничений, min-width и фиксированные размеры. На интервью лучше назвать его способом сделать размеры предсказуемее, а не гарантией идеальной верстки.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми проверяют, понимаете ли вы расчет размеров в CSS на практике.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.

Содержание