Kodokon kodokon.com

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

Пойми, что каждый элемент - это блок из содержимого, внутреннего отступа, рамки и внешнего отступа, и освой box-sizing.

10 мин · 3 вопросов

Открыть этот урок в Kodokon

В CSS каждый элемент страницы - это прямоугольный блок, даже если ты его не видишь. У этого блока четыре слоя, как у картины в раме на стене: содержимое (сама картина), внутренний отступ (белое паспарту между картиной и рамой), рамка (сама рама) и внешний отступ (пустое пространство между рамой и другими картинами на стене). Это и называется блочной моделью.

Этими слоями управляют три свойства. padding задаёт внутреннее пространство, между содержимым и рамкой. border рисует рамку: ты указываешь ей толщину, стиль (solid - сплошная линия) и цвет. margin задаёт внешнее пространство, которое отталкивает соседние элементы. Все эти расстояния выражаются в пикселях (px).

CSS
.card {
  padding: 16px;
  border: 2px solid black;
  margin: 24px;
}
16 px внутреннего пространства, чёрная линия, 24 px по кругу.

Каждую сторону можно настроить отдельно через padding-top, padding-right, padding-bottom и padding-left, и то же самое работает для margin. Есть и сокращённые записи: при двух значениях первое применяется сверху и снизу, второе - слева и справа. Так что padding: 8px 16px; означает 8 пикселей сверху и снизу, 16 пикселей слева и справа.

CSS
.card {
  padding: 8px 16px;
  margin-top: 32px;
  margin-bottom: 8px;
}
Сокращённая запись из двух значений и настройка отдельных сторон.

Классическая ловушка: по умолчанию, когда ты пишешь width: 200px; (свойство width задаёт ширину), эти 200 пикселей покрывают только содержимое. Внутренний отступ и рамка добавляются сверху! Блок с width: 200px, padding: 16px и border: 2px на самом деле занимает 200 + 16 + 16 + 2 + 2 = 236 пикселей по ширине. Свойство box-sizing: border-box; это исправляет: объявленная ширина тогда включает внутренний отступ и рамку. Блок действительно шириной 200 пикселей, а сжимается именно содержимое.

CSS
* {
  box-sizing: border-box;
}

.card {
  width: 200px;
  padding: 16px;
  border: 2px solid black;
}
С border-box у .card ровно 200 px в ширину.

Проверка знаний

Убедись, что запомнил ключевые моменты этого урока.

  1. Какое свойство задаёт пространство между содержимым блока и его рамкой?
    • margin
    • padding
    • border
    • width
  2. Без box-sizing: border-box какую общую ширину занимает блок с width: 100px, padding: 10px и border: 5px solid black?
    • 100 пикселей
    • 115 пикселей
    • 130 пикселей
    • 110 пикселей
  3. Что означает сокращённая запись margin: 10px 20px;?
    • 10 px слева и справа, 20 px сверху и снизу
    • 10 px сверху и снизу, 20 px слева и справа
    • 10 px сверху, 20 px снизу