Открыть сервис

Блочная модель

Блочная модель (англ. box model) — это фундаментальная концепция веб-верстки, описывающая способ представления каждого HTML-элемента на веб-странице в виде прямоугольной области (блока), состоящей из нескольких вложенных друг в друга слоев. Эта модель определяет, как вычисляются итоговые размеры и положение элемента, а также как элементы взаимодействуют друг с другом в потоке документа. Понимание блочной модели является обязательным для создания предсказуемых и адаптивных макетов.

История

Концепция блочной модели возникла вместе с развитием каскадных таблиц стилей (CSS) в середине 1990-х годов. Первая спецификация CSS1, опубликованная Консорциумом Всемирной паутины (W3C) в 1996 году, уже содержала базовые определения свойств margin, border, padding и width. Однако в ранних браузерах (например, Internet Explorer 5 для Mac) существовала альтернативная интерпретация модели, известная как «режим quirks mode» (режим совместимости), при которой значения width и height включали в себя padding и border. Это приводило к значительным расхождениям в отображении страниц в разных браузерах.

Для разрешения этой проблемы в спецификации CSS2.1 (2007 год) была введена модель, где width и height задают только размеры содержимого (content-box). Позднее, в CSS3 (модуль CSS Basic Box Model), было добавлено свойство box-sizing, позволяющее разработчику выбирать между двумя основными моделями вычислений: content-box (стандартная) и border-box (альтернативная, где width включает padding и border). В настоящее время border-box широко используется в современных фреймворках и библиотеках для упрощения расчетов.

Структура блочной модели

Каждый HTML-элемент, к которому применено CSS-свойство display: block (например, <div>, <p>, <h1>, <section>), а также элементы со значением display: inline-block или display: table-cell, образует прямоугольный блок. Этот блок состоит из четырех концентрических областей, расположенных от внутренней к внешней:

  1. Content (содержимое) — внутренняя область, где отображается контент элемента (текст, изображения, вложенные элементы). Размеры этой области задаются свойствами width и height.
  2. Padding (внутренний отступ) — пространство между содержимым и границей элемента. Оно прозрачно и используется для создания отступа от контента до рамки. Задается свойствами padding-top, padding-right, padding-bottom, padding-left или сокращением padding.
  3. Border (граница) — линия, окружающая padding и содержимое. Может быть разной толщины, стиля и цвета. Задается свойствами border-width, border-style, border-color или сокращением border.
  4. Margin (внешний отступ) — прозрачное пространство, отделяющее данный блок от соседних элементов. Создает отступ между границами элементов. Задается свойствами margin-top, margin-right, margin-bottom, margin-left или сокращением margin.

Визуальное представление

Схематично блочная модель изображается в виде «луковицы»: в центре — содержимое, затем — padding, затем — border, и снаружи — margin. В CSS-инструментах разработчика (например, в Google Chrome DevTools) эта структура отображается в виде цветной диаграммы, где каждая область имеет свой цвет.

Свойства и вычисление размеров

Стандартная модель (content-box)

По умолчанию в CSS используется модель box-sizing: content-box. В этой модели значения свойств width и height применяются только к области содержимого (content). Итоговая ширина элемента на странице вычисляется по формуле:

Итоговая ширина = width + padding-left + padding-right + border-left-width + border-right-width

Аналогично для высоты:

Итоговая высота = height + padding-top + padding-bottom + border-top-width + border-bottom-width

Внешние отступы (margin) не влияют на размер самого блока, но увеличивают занимаемое им пространство в потоке документа.

Модель border-box

При использовании box-sizing: border-box значения width и height включают в себя ширину содержимого, padding и border. Итоговая ширина элемента в этом случае равна заданному width. Содержимое автоматически сжимается, чтобы уместиться в оставшееся пространство.

Итоговая ширина = width (содержит padding и border)

Эта модель значительно упрощает верстку, особенно при создании адаптивных сеток, так как разработчику не нужно вручную вычитать padding и border из общей ширины. Многие CSS-фреймворки (например, Bootstrap, Tailwind CSS) по умолчанию устанавливают box-sizing: border-box для всех элементов.

Схлопывание внешних отступов (margin collapsing)

Одним из важных аспектов блочной модели является схлопывание (коллапс) внешних отступов. Это явление возникает, когда вертикальные внешние отступы (margin-top и margin-bottom) двух соседних блочных элементов соприкасаются. Вместо того чтобы суммироваться, они объединяются в один отступ, равный наибольшему из них.

Например, если у первого элемента margin-bottom: 30px, а у второго — margin-top: 20px, расстояние между ними будет 30 пикселей, а не 50. Схлопывание не происходит для горизонтальных отступов (margin-left и margin-right), а также для отступов элементов с display: inline-block, float или position: absolute.

Влияние на макет

Блочная модель напрямую определяет поведение элементов в нормальном потоке документа. Блочные элементы располагаются вертикально друг под другом, занимая всю доступную ширину родительского контейнера (если не задана фиксированная ширина). Внутренние отступы (padding) и границы (border) увеличивают видимый размер блока, что может привести к переполнению (overflow) родительского контейнера, если не учесть эти значения.

Для управления переполнением используется свойство overflow (значения: visible, hidden, scroll, auto). Для управления размерами блока относительно родителя — max-width, min-width, max-height, min-height.

Применение

Блочная модель применяется повсеместно при создании любых веб-интерфейсов. Она используется для:

  • Создания сеток и колонок — с помощью width, margin, padding и box-sizing формируются адаптивные макеты.
  • Оформления карточек, кнопок, форм — padding задает внутренние отступы для текста, border — рамки, margin — отступы между элементами.
  • Позиционирования элементовпонимание модели необходимо для работы с float, position и flexbox.
  • Отладки версткиинструменты разработчика браузера позволяют визуально инспектировать каждый слой блочной модели.

Критика и особенности

Основная критика стандартной блочной модели (content-box) связана с неинтуитивностью вычисления итоговых размеров. Добавление padding или border к элементу с фиксированной шириной приводит к его расширению, что часто становится неожиданностью для начинающих верстальщиков. Это привело к массовому переходу на border-box в современных проектах.

Другой особенностью является то, что свойство margin может принимать отрицательные значения. Это позволяет сдвигать элемент в противоположном направлении или «наезжать» на соседние блоки, что используется для создания сложных визуальных эффектов, но может нарушить поток документа.

Источники

  1. Спецификация CSS Basic Box Model (W3C).
  2. Спецификация CSS 2.1, раздел 8. Box model.
  3. Документация MDN Web Docs: «Introduction to the CSS basic box model».
  4. «CSS: The Definitive Guide» by Eric A. Meyer and Estelle Weyl (O'Reilly Media).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →