Что такое схлопывание внешних отступов в CSS?
Box Model
Схлопывание внешних отступов — правило, по которому вертикальные margin соседних блоков (или родителя и ребёнка) объединяются в один, равный большему из них.
Три случая
- Соседние блоки —
margin-bottom: 20pxиmargin-top: 30pxдают 30px. - Родитель и первый/последний ребёнок — если у родителя нет padding, border или содержимого над ребёнком,
margin-topребёнка «выходит» за родителя. - Пустой блок — его собственные
margin-topиmargin-bottomсхлопываются друг с другом.
<section style="background: #eee">
<h2 style="margin-top: 40px">Заголовок</h2>
</section>
<!-- отступ 40px окажется снаружи серого фона -->Как избежать
- добавить родителю
paddingилиborder; display: flow-rootу родителя;- использовать flex или grid — там margin не схлопываются;
- задавать отступы через
gap.
Коротко для собеседования
Вертикальные margin соседних блоков и родителя с ребёнком объединяются в больший; во flex/grid и при flow-root этого нет.
Подробнее: MDN — Схлопывание отступов