Skip to content

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

Что такое box model? ​

Каждый элемент на веб-странице можно представить как прямоугольную коробку (box), которая состоит из нескольких областей:

  • Content - основная область, где отображается текст, изображение и т.д;
  • Padding - внутренний отступ (расстояние между Content и Border);
  • Border - рамка вокруг Content и Padding;
  • Margin - внешний отступ (пространство снаружи элемента).
sh
┌────────────────────────────────────────────┐
│                MARGIN                      │←---margin (внешний отступ)
│  ┌──────────────────────────────────────┐  │
│  │            BORDER                    │←------border (граница)
│  │  ┌──────────────────────────────┐    │  │
│  │  │          PADDING             │←-----------padding (внутренний отступ)
│  │  │  ┌──────────────────────┐    │    │  │
│  │  │  │      CONTENT         │    │    │  │
│  │  │  └──────────────────────┘    │    │  │
│  │  └──────────────────────────────┘    │  │
│  └──────────────────────────────────────┘  │
└────────────────────────────────────────────┘

Типы блочных моделей ​

  • box-sizing - блочная модель;
    • content-box - width и height прибавляются к padding и border (используется по умолчанию);
    • border-box - width и height задают размер всей коробки;

Например. Изменим файл index.html:

html
<div class="content-box-example">content-box</div>

<div class="border-box-example">border-box</div>

Изменим файл styles.css:

css
.content-box-example,
.border-box-example {
    width: 200px;
    height: 100px;
    padding: 20px;
    margin: 20px;
}

.content-box-example {
    border: 5px solid blue;
    background: lightblue;
    box-sizing: content-box;
}

.border-box-example {
    border: 5px solid green;
    background: lightgreen;
    box-sizing: border-box;
}

Ширина синей области = width + padding * 2 + border * 2 = 200 + 20 * 2 + 5 * 2 = 250px;

Высота синей области = height + padding * 2 + border * 2 = 100 + 20 * 2 + 5 * 2 = 150px;

Ширина зелёной области = width (высчитывается автоматически) + padding * 2 + border * 2 = 150 + 20 * 2 + 5 * 2 = 200px;

Высота зелёной области = height (высчитывается автоматически) + padding * 2 + border * 2 = 50 + 20 * 2 + 5 * 2 = 100px;