CSS

Margin и Padding

Подробно о margin и padding: синтаксис, схлопывание, auto, отрицательные значения.

Начальный (Beginner)
Нужно знать:Блочная модель

Кратко

Margin и padding — два ключевых свойства для пространства. Padding — внутренний отступ (содержимое + фон), margin — внешний (пространство между элементами). margin: 0 auto — центрирование. Отрицательные margin'ы сдвигают элементы. Margin collapse — схлопывание вертикальных отступов.


Подробно

Синтаксис (одинаков для margin и padding):

1 значение: margin: 10px; (все 4 стороны) 2 значения: margin: 10px 20px; (вертикаль/горизонталь) 3 значения: margin: 10px 20px 30px; (верх/горизонталь/низ) 4 значения: margin: 10px 20px 30px 40px; (верх/право/низ/лево)

margin: auto — центрирование блока: .block { width: 300px; margin: 0 auto; } Работает для блочных элементов с заданной шириной.

margin collapse (схлопывание):

  • Работает только для ВЕРТИКАЛЬНЫХ margin'ов
  • Работает для смежных блочных элементов
  • Не работает для padding, border, inline элементов

Отрицательные margin:

  • margin-top: -20px; — элемент сдвигается ВВЕРХ
  • margin-left: -10px; — элемент сдвигается ВЛЕВО
  • Опасно: может нарушить вёрстку

Применение:

  • padding: для пространства ВНУТРИ (карточки, кнопки)
  • margin: для пространства МЕЖДУ (расстояние между секциями)
  • gap: современная альтернатива margin для flex/grid

Ментальная модель

Padding — как подушка внутри коробки (содержимое не давит на стенки). Margin — как невидимый барьер между коробками (не даёт им столкнуться). Margin collapse — два магнита: когда они рядом, расстояние = max из двух, а не сумма.


Примеры

**Самый простой:**

css
.box {
  padding: 20px;          /* Все стороны */
  margin: 10px 20px;       /* Вертикаль 10, горизонталь 20 */
  margin: 0 auto;          /* Центрирование */
}

Базовый синтаксис: все стороны, сокращение, auto.

**Простой:**

css
/* Карточка */
.card {
  padding: 24px;
  margin-bottom: 16px;
}

/* Первый элемент без верхнего отступа */
.card:first-child {
  margin-top: 0;
}

/* Центрирование контейнера */
.container {
  width: min(90%, 800px);
  margin-inline: auto;
  padding: 0 1rem;
}

/* Gap вместо margin для сетки */
.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem; /* Современная замена margin для сетки */
}

Практические паттерны: карточка, центрирование, gap.

**Реальный пример:**

css
/* Секции с collapsing */
.section {
  padding: clamp(3rem, 8vw, 6rem) 0;
}

/* Отрицательный margin для перекрытия */
.hero {
  position: relative;
}

.hero-content {
  margin-top: -4rem; /* Поднимает контент поверх hero */
  position: relative;
  z-index: 1;
}

/* Автоматические отступы в flex */
.nav-item + .nav-item {
  margin-left: auto; /* Последний элемент прижат вправо */
}

/* Кнопка с padding */
.btn {
  padding: 0.75em 1.5em;
  margin: 0.25em;
  border: none;
  border-radius: 6px;
  /* padding задаёт размер кнопки, margin — расстояние между ними */
}

Реальные паттерны: секции, отрицательные margin, flex-центрирование. Это пример будущих тем: position, flexbox и clamp() детально разбираются в C12, C13 и C22.


Частые ошибки

**Неправильно:** Использовать margin вместо gap для сеток

**Почему:** Margin создаёт проблемные отступы у крайних элементов. Gap — безопасная альтернатива для flex/grid.

**Правильно:** В flex/grid используйте gap. Margin — для пространства между не- flex/grid элементами.

**Неправильно:** Не понимать margin collapse

**Почему:** margin-bottom: 20px + margin-top: 30px = 30px (не 50px!). Это удивляет.

**Правильно:** Margin collapse: вертикальные смежные margin'ы схлопываются (берётся max).

**Неправильно:** Злоупотреблять отрицательными margin

**Почему:** Отрицательные margin непредсказуемы и ломают нормальный поток. Используйте position и transform.

**Правильно:** Для сдвига элементов: position: relative + transform: translateY(-20px).


Важно запомнить

  • Padding: внутри (содержимое + фон элемента)
  • Margin: снаружи (пространство между элементами)
  • margin: 0 auto — центрирование блока с шириной
  • Margin collapse — схлопывание вертикальных margin'ов
  • Gap — современная альтернатива margin для flex/grid

Связь

Назад: Вы знаете блочную модель (C7) — margin и padding это два её свойства для создания отступов.

Вперёд: В следующем уроке (C9) вы изучите display и поток документа: block, inline, inline-block и обычный поток.

Материалы курса CSS — PROlab Academy.