Когда элемент с полем содержится в другом элементе, родительский элемент не всегда оборачивает/содержит этот край.
Многие вещи приведут к тому, что родительский объект будет содержать дочернее поле:
border: solid;
position: absolute;
display: inline-block;
overflow: auto;
(И это только из небольшого тестирования, без сомнения, есть и другие.)
Я предполагаю, что это связано с сокращением полей, но:
- На странице спецификации W3C нет описания такого поведения.
- Здесь нет перекрывающихся полей.
- Поведение всех браузеров в этом вопросе похоже.
- На поведение влияют триггеры, не связанные с полями.
По какой логике элемент по умолчанию overflow: auto
должен содержать материал, отличный от того, в котором для переполнения задано значение auto?
Почему все, кроме поведения обычного div по умолчанию, предполагают, что поле содержит родительский элемент, и почему обычное значение по умолчанию не должно содержать поле?
ОБНОВЛЕНИЕ: Окончательный ответ заключается в том, что W3C действительно определяет это поведение, но это:
- Спецификации не имеют никакого смысла.
- Спецификации смешиваются, без каких-либо объяснений:
- "свободные поля" (поля, которые могут касаться верхней или нижней части родительского элемента, не содержатся родителем) и
- "Свернутые поля" (смежные поля могут перекрываться).
Демонстрация:
body {
margin: 0;
}
div.block {
background-color: skyblue;
}
div.inline-block {
display: inline-block;
background-color: lawngreen;
}
div.position-absolute {
background-color: rgba(255,255,0,.7);
position: absolute;
bottom: 0;
right: 0;
}
div.overflow-auto {
background-color: hotpink;
overflow: auto;
}
div.border {
background-color: aquamarine;
border: solid;
}
h2 {
margin: 80px;
width: 250px;
border: solid;
}
<div class="block">
<h2>Is the margin contained (block)?</h2>
</div>
<div class="inline-block">
<h2>Is the margin contained (inline-block)?</h2>
</div>
<div class="position-absolute">
<h2>Is the margin contained (position-absolute)?</h2>
</div>
<div class="overflow-auto">
<h2>Is the margin contained (overflow-auto)?</h2>
</div>
<div class="border">
<h2>Is the margin contained (border)?</h2>
</div>