Если элемент с полем содержится в другом элементе, родительский элемент не всегда оборачивает это поле.
Многие вещи заставят родителя обернуть поле ребенка:
- границы: твердый;
- позиция: абсолютная;
- дисплей: встроенный блок;
- переполнение: авто
(И это только из небольшого тестирования, несомненно, есть и другое.)
Я бы предположил, что это связано с сокращением полей, но:
- На странице спецификации W3C нет описания такого поведения.
- Здесь нет перекрывающихся полей.
- Поведение всех браузеров по этому вопросу одинаково.
- На поведение влияют триггеры, не связанные с полями
По какой логике элемент по умолчанию переполнен: auto должен содержать материал, отличный от того, для которого переполнение установлено в auto.
Почему все, кроме поведения обычного div по умолчанию, предполагают, что поле содержит родительский элемент, и почему обычное значение по умолчанию не включает поле?
РЕДАКТИРОВАТЬ: окончательный ответ заключается в том, что W3C действительно определяет это поведение, но это
- Спецификации не имеют никакого смысла.
- Спецификации смешиваются, без всяких объяснений :
- «свободные поля» (поля, которые могут касаться верхней или нижней части родительского элемента, не содержатся родителем) и
- «Свернутые поля» (смежные поля могут перекрываться).
Демо-версия:
<!doctype html>
<html>
<head>
<title>Margins overextending themselves</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
<style type="text/css">
body{
margin:0;
}
div.b{
background-color:green;
}
div.ib{
display:inline-block;
background-color:red;
}
div.pa{
background-color:yellow;
position:absolute;
bottom:0; right:0;
}
div.oa{
background-color:magenta;
overflow:auto;
}
div.brdr{
background-color:pink;
border:solid;
}
h1{margin:100px; width:250px; border:solid;}
</style>
</head>
<body>
<div class="b">
<h1>Is the margin contained?</h1>
</div>
<div class="ib">
<h1>Is the margin contained?</h1>
</div>
<div class="pa">
<h1>Is the margin contained?</h1>
</div>
<div class="oa">
<h1>Is the margin contained?</h1>
</div>
<div class="brdr">
<h1>Is the margin contained?</h1>
</div>
</body>
</html>`