Margin и padding в CSS: в чём разница и как правильно задавать...

Margin и padding в CSS: в чём разница и как правильно задавать отступы

Margin и padding в CSS: в чём разница и как правильно задавать отступы

Поисковый запрос «margin и padding в CSS разница» появляется у многих, кто начинает верстать страницы. На первый взгляд оба свойства отвечают за «пустое место», но на практике они решают разные задачи. Если понимать разницу, проще делать аккуратные карточки, кнопки, формы и адаптивные блоки без хаотичных костылей.

Коротко: чем отличаются margin и padding

padding — это внутренний отступ элемента: расстояние между содержимым и границей блока. margin — внешний отступ: расстояние от элемента до соседних элементов.

.card {
  padding: 24px; /* отступ внутри карточки */
  margin: 32px;  /* отступ снаружи карточки */
}

Представьте коробку: текст внутри коробки — это содержимое, мягкая прокладка внутри коробки — padding, а пространство между коробками на полке — margin.

Как padding влияет на размер элемента

По умолчанию в CSS ширина элемента считается только по содержимому. Если задать width: 300px и добавить padding: 20px, фактическая ширина станет больше: 300 + 20 слева + 20 справа.

.box {
  width: 300px;
  padding: 20px;
  border: 2px solid #333;
}

Чтобы ширина включала padding и border, обычно используют box-sizing: border-box. Это почти стандартная настройка для современных проектов:

*,
*::before,
*::after {
  box-sizing: border-box;
}

Так элемент с width: 300px останется шириной 300px, даже если у него есть внутренние отступы и рамка.

Краткая запись margin и padding

Оба свойства поддерживают одинаковую краткую запись. Важно запомнить порядок: сверху, справа, снизу, слева — по часовой стрелке.

.block {
  padding: 20px;              /* со всех сторон */
  margin: 20px 40px;          /* сверху/снизу 20px, слева/справа 40px */
  padding: 10px 20px 30px;    /* верх 10px, стороны 20px, низ 30px */
  margin: 10px 20px 30px 40px;/* верх, право, низ, лево */
}

Также можно задавать стороны отдельно:

.title {
  margin-bottom: 16px;
}

.button {
  padding-top: 12px;
  padding-right: 20px;
  padding-bottom: 12px;
  padding-left: 20px;
}

Когда использовать margin, а когда padding

Практическое правило простое:

  • padding используйте, когда нужно больше пространства внутри элемента;
  • margin используйте, когда нужно отодвинуть элемент от других элементов;
  • для кнопок, карточек, полей ввода чаще нужен padding;
  • для расстояния между секциями, заголовками и абзацами чаще нужен margin.
  • Пример кнопки: тексту должно быть «просторно» внутри кнопки, значит используем padding.

    .button {
      display: inline-block;
      padding: 12px 24px;
      border-radius: 8px;
      background: #2563eb;
      color: white;
      text-decoration: none;
    }

    Пример заголовка: его нужно отделить от следующего текста, значит используем margin.

    .section-title {
      margin: 0 0 20px;
      font-size: 32px;
    }

    Практический пример: карточка товара

    В карточке padding отвечает за воздух внутри, а margin — за расстояние между карточками или отступ от других блоков.

    <div class='product-card'>
      <h3 class='product-card__title'>Кроссовки</h3>
      <p class='product-card__text'>Лёгкая модель для прогулок и спорта.</p>
      <a class='product-card__button' href='#'>Купить</a>
    </div>
    .product-card {
      max-width: 320px;
      padding: 24px;
      margin-bottom: 24px;
      border: 1px solid #e5e7eb;
      border-radius: 16px;
      background: #fff;
    }
    
    .product-card__title {
      margin: 0 0 12px;
    }
    
    .product-card__text {
      margin: 0 0 20px;
      color: #4b5563;
    }
    
    .product-card__button {
      display: inline-block;
      padding: 10px 18px;
      border-radius: 8px;
      background: #111827;
      color: #fff;
      text-decoration: none;
    }

    Обратите внимание: у заголовка и текста сначала сброшен верхний и нижний margin через margin: 0 0 .... Это помогает контролировать расстояния и не зависеть от браузерных стилей по умолчанию.

    Схлопывание margin: частая ловушка новичков

    Вертикальные внешние отступы у блочных элементов могут схлопываться. Например, если у первого блока margin-bottom: 30px, а у второго margin-top: 20px, итоговое расстояние между ними часто будет не 50px, а 30px.

    .first {
      margin-bottom: 30px;
    }
    
    .second {
      margin-top: 20px;
    }

    Это нормальное поведение CSS, но оно может удивлять. Чтобы избежать путаницы, выберите один подход: например, задавайте вертикальные отступы только снизу у элементов внутри контентной области.

    .content h2,
    .content p,
    .content ul {
      margin-top: 0;
      margin-bottom: 16px;
    }

    Можно ли задавать отрицательный margin?

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

    .badge {
      margin-top: -10px;
    }

    Если отрицательные margin появляются часто, возможно, проблема в структуре HTML или в выбранном способе раскладки.

    Отступы в современных layout: gap вместо margin

    Если элементы расположены через Flexbox или Grid, для расстояния между ними часто лучше использовать gap. Это чище, чем навешивать margin на каждый элемент.

    .cards {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 24px;
    }

    gap задаёт расстояние между элементами сетки, не создавая лишних внешних отступов по краям контейнера.

    Рекомендации по работе с отступами

  • Используйте padding для внутреннего пространства компонентов.
  • Используйте margin для расстояний между независимыми блоками.
  • Не задавайте хаотичные отступы со всех сторон: выберите систему, например 8, 16, 24, 32px.
  • В списках карточек применяйте gap, если используется flex или grid.
  • Сбрасывайте стандартные margin у заголовков и абзацев там, где нужен полный контроль.
  • Если вы хотите не просто запомнить свойства, а научиться применять их в настоящих макетах, посмотрите практический курс «Вёрстка сайта с нуля 2.0»: там отступы, сетки и компоненты разбираются на реальных примерах вёрстки.

    Итог

    Margin и padding в CSS — базовые, но очень важные инструменты. Padding создаёт пространство внутри элемента, margin — снаружи. Для кнопки почти всегда нужен padding, для расстояния между секциями — margin, а для равномерных промежутков в flex/grid-контейнерах — gap. Освоив эти различия, вы будете быстрее находить ошибки в вёрстке и делать интерфейсы визуально аккуратнее.

    Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий