Lorsqu'un élément avec une marge est contenu dans un autre élément, le parent n'enveloppe pas systématiquement cette marge.Pourquoi la marge ne serait-elle pas contenue par l'élément parent?
Beaucoup de choses causeront le parent d'envelopper la marge de l'enfant:
- frontière: solide;
- position: absolue;
- affichage: en-bloc;
- overflow: auto
(. Et ce juste de petits essais, sans doute il y a plus)
Je suppose que cela a à voir avec des marges effondrement, mais:
- La page de spécifications W3C n'a aucune description d'un tel comportement.
- Il n'y a pas de chevauchement de marges ici.
- Le comportement de tous les navigateurs semble être cohérent sur ce problème.
- Le comportement est affecté par les déclencheurs qui ne sont pas liés aux marges
Quelle est la logique par laquelle un élément par défaut overflow: auto doit contenir du matériel différent de celui où le dépassement est réglé sur auto .
Pourquoi tout sauf le comportement par défaut d'une div régulière suppose-t-il que la marge est contenue par le parent - et pourquoi la valeur par défaut standard ne devrait-elle pas inclure la marge?
EDIT: La réponse finale est que le W3C fait vraiment préciser ce comportement, mais que
- Les spécifications ne font pas vraiment de sens.
- The specs mix, without any word of explanation:
- « marges libres » (marges qui touchent la partie supérieure ou inférieure de leur parent ne sont pas contenus par le parent) et
- « effondrées marges » (les marges adjacentes sont autorisées à se chevaucher).
Démo:
<!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>`
Je ne comprends pas ce que vous demandez. Demandez-vous pourquoi les éléments h1 s'affichent à l'intérieur des éléments du conteneur? S'il vous plaît soyez plus clair avec votre question. –