Получить доступ

Что такое блочная модель CSS и чем content-box отличается от border-box?

JuniorВёрстка и CSS
Ещё спрашивают так:
  • Почему ширина элемента больше заданной в width?
Коротко

Каждый элемент — прямоугольник из content, padding, border, margin. При content-box (по умолчанию) width задаёт только содержимое, а padding и border добавляются сверху. При border-box width включает padding и border — размеры предсказуемы, поэтому почти все проекты задают *, *::before, *::after { box-sizing: border-box }.

  • margin не входит в размер элемента ни в одном режиме
  • Вертикальные margin соседних блоков схлопываются (берётся больший)
  • Внутри flex и grid схлопывания margin нет

А ещё outline не занимает места и не влияет на раскладку

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

Подробно

.card { width: 300px; padding: 20px; border: 2px solid; }
/* content-box: реальная ширина 300 + 40 + 4 = 344px */
/* border-box:  реальная ширина 300px, содержимое 256px */

Схлопывание margin: у соседних блоков по вертикали между ними остаётся больший из двух отступов, а не сумма. То же происходит между родителем и первым ребёнком, если у родителя нет padding, border или он не создаёт новый контекст форматирования.

Строчные элементы (inline) игнорируют width, height и вертикальные margin; inline-block — ведёт себя как блок внутри строки.

Что хотят услышать

  • Четыре части модели.
  • Разница box-sizing.
  • Схлопывание margin.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем