Box Model: как браузер «думает» о блоках

Разбираемся, как устроена блочная модель в CSS — content, padding, border, margin. Почему всё «едет» без box-sizing, как считать размеры элементов и где это спасёт тебе макет.

WebРазработка

🤔 Что вообще такое Box Model?

Box Model (блочная модель) — это способ, которым браузер представляет и рассчитывает каждый элемент на странице. Любой HTML-элемент, будь то <div>, <p>, <button>, браузер воспринимает как прямоугольную коробку.

И вот у этой коробки есть структура:

  • Content — содержимое (текст, картинка и т.д.)

  • Padding — внутренний отступ от контента до рамки

  • Border — рамка вокруг элемента

  • Margin — внешний отступ до соседних элементов

🔍 Почему это важно?

Ты можешь отлично знать HTML и CSS, но если не понимаешь, как рассчитываются размеры блока, то будешь постоянно задаваться вопросами вроде:

  • «Почему блок выходит за границы родителя?»

  • «Почему margin не работает как я ожидал?»

  • «Почему два блока слились в один?»

И почти всегда ответ — в box model.

📏 Формула расчёта размеров

Пример:

width: 200px;
padding: 10px;
border: 2px solid black;
margin: 20px;

Если используется box-sizing: content-box:

Итоговая ширина = 200 + 10 + 10 + 2 + 2 = 224px

Если используется box-sizing: border-box:

Ширина включает в себя padding и border → content = 176px

🧠 Как браузер рисует блок?

  1. Парсит HTML

  2. Применяет CSS

  3. Создаёт дерево рендеринга

  4. Считает размеры всех элементов через Box Model

  5. Рисует всё на экран

🚫 Частые ошибки и мифы

🔹 Margin collapse

Вертикальные отступы соседних блоков не складываются, а сливаются — остаётся больший.

🔹 Элементы выходят за пределы контейнера

Если задан width: 100% и добавлен padding, блок может вылезти. Решение: box-sizing: border-box.

🔹 Border влияет на размеры

Даже 1px рамка меняет размер. Используй box-sizing или outline для hover.

🎨 Как это увидеть в браузере?

  1. Открой DevTools (F12)

  2. Выдели элемент

  3. Во вкладке Computed — визуализация Box Model

🧪 Советы из практики

  • Добавь глобально: * { box-sizing: border-box; }

  • Следи за margin в grid/flex контейнерах

  • Вместо border для фокуса можно использовать outline

💻 Почему это важно именно тебе, разработчику?

Box Model — это контроль над версткой. Ты не просто задаёшь ширину и высоту, ты управляешь поведением интерфейса. Pixel-perfect начинается с box model.

📱 Хочешь разобраться во фронтенде глубже?

Скачай Кодик — приложение с пошаговыми курсами по фронтенду, где всё объясняется на русском и простыми словами. Учи, практикуй, вёрстай уверенно.

🎯 Вывод

Box Model — это фундамент. Освоишь — и верстка станет стабильной. Не освоишь — и будешь воевать с отступами всю жизнь.

👇 А ты используешь box-sizing: border-box по умолчанию? Напиши в комментарии, как впервые столкнулся с box model — и как многое стало на свои места!