Что такое схлопывание границ в CSS?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Схлопывание границ (margin collapsing) — это явление в CSS, когда вертикальные границы блоков, находящихся рядом, сливаются в одну. Размер этой объединенной границы определяется как максимальное значение из схлопывающихся границ.
Схлопывание происходит в следующих случаях:
-
Между соседними элементами: Вертикальные границы двух соседних элементов схлопываются.
<p>Абзац 1</p> <p>Абзац 2</p>Если
<p>имеютmargin-bottomиmargin-topсоответственно, эти границы могут схлопнуться. -
Между родителем и первым/последним дочерним элементом: Если у родителя нет
border,padding,display: flex,display: grid,overflow: hiddenи других свойств, которые создают контекст форматирования, его верхняя граница может схлопнуться сmargin-topпервого дочернего элемента. Аналогично, нижняя граница родителя может схлопнуться сmargin-bottomпоследнего дочернего элемента.<div class="parent"> <p class="child">Дочерний элемент</p> </div> -
При пустом элементе: Если у элемента нет содержимого (
height: 0, нетborderиpadding), его верхняя и нижняя границы могут схлопнуться друг с другом.<div class="empty"></div>
Таблица, иллюстрирующая результаты схлопывания:
| Margin 1 | Margin 2 | Результат схлопывания |
|---|---|---|
| 10px | 15px | 15px |
| 20px | -5px | 20px |
| -10px | -15px | -10px |
Схлопывание границ происходит только в вертикальном направлении (только margin-top и margin-bottom). Горизонтальные границы (margin-left и margin-right) никогда не схлопываются.
Существуют способы предотвратить схлопывание, например, добавление border, padding, использование display: flex, display: grid, overflow: hidden или создание нового контекста форматирования блока с помощью display: flow-root.