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. Освоив эти различия, вы будете быстрее находить ошибки в вёрстке и делать интерфейсы визуально аккуратнее.
-
Создано 24.07.2026 17:00:42
-
Михаил Русаков

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.