Интервью-вопрос
Что такое box-sizing
box-sizing задает, что именно входит в CSS размеры элемента. Для интервью важно объяснить разницу между content-box и border-box и связать ее с реальными багами в верстке.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
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 считается иначе, он может вылезти за блок или сдвинуть визуальный слой.
Как выбрать модель размера
Как рассуждать на практике
Используйте border-box, особенно для карточек, колонок, форм и адаптивных блоков.Можно оставить content-box локально и явно учитывать padding и border.Проверьте, распространяется ли он на псевдоэлементы. Иначе ::before и ::after могут дать неожиданный размер.Проверьте не только 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
Считать, что width всегда равен видимой ширине
Приcontent-boxэто неверно. Видимая ширина станет больше из-заpaddingиborder. В адаптивной сетке такой блок может вылезти за родителя и создать горизонтальный скролл. Безопаснее сразу сказать, что итоговый размер зависит от выбранной модели. - 2
Забывать про margin
marginне входит вbox-sizing. Даже приborder-boxдва элемента с большими внешними отступами могут не помещаться в строку. Если проблема во внешнем расстоянии, менятьbox-sizingнедостаточно. - 3
Не включать псевдоэлементы в reset
Если правило задано только для*, псевдоэлементы могут остаться в другом режиме или получить размер, который не совпадает с вашим ожиданием. Для декоративных рамок, бейджей и оверлеев это быстро дает сдвиги. Обычно пишут*, *::before, *::after. - 4
Использовать border-box как универсальное лекарство
border-boxделает расчет ширины удобнее, но не чинит длинные слова, картинки без ограничений,min-widthи фиксированные размеры. На интервью лучше назвать его способом сделать размеры предсказуемее, а не гарантией идеальной верстки.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которыми проверяют, понимаете ли вы расчет размеров в CSS на практике.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Что такое адаптивная верстка 😎
Адаптивная верстка помогает интерфейсу оставаться удобным на разных экранах. Разбираем, что сказать на интервью, какие CSS-инструменты упомянуть и какие ошибки чаще всего ломают мобильный UX.
Что такое flex-grow 😎
flex-grow задает, как flex-элемент забирает положительное свободное место в строке flex-контейнера. Разбираем, почему это не просто деление ширины поровну и как не ошибиться с flex-basis, gap и фиксированными размерами.