Что такое схлопывание отступов (margin collapsing)

«Что такое схлопывание отступов (margin collapsing)» — вопрос из категории CSS, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Схлопывание margin'ов (margin collapsing) происходит, когда вертикальные отступы соседних элементов объединяются в один. Это зависит от:

  1. Направления margin: работает только с вертикальными (top/bottom) margin'ами.
  2. Типа элементов: схлопывание происходит между блочными элементами (block-level), но не работает с flex, grid или абсолютно позиционированными элементами.
  3. Родительских отношений: margin'ы дочернего элемента могут схлопнуться с margin'ами родителя, если у родителя нет padding, border или inline-контента.

Пример:

<div style="margin-bottom: 20px;">Первый блок</div>
<div style="margin-top: 30px;">Второй блок</div>

Фактический отступ между блоками будет 30px (а не 50px), так как margin'ы схлопнулись.