Maison > interface Web > tutoriel CSS > Pourquoi les éléments parents ne contiennent-ils pas toujours les marges des éléments enfants de manière cohérente ?

Pourquoi les éléments parents ne contiennent-ils pas toujours les marges des éléments enfants de manière cohérente ?

Linda Hamilton
Libérer: 2024-11-02 23:13:30
original
839 Les gens l'ont consulté

Why Do Parent Elements Not Always Contain Child Element Margins Consistently?

Confinement de marge incohérente de l'élément parent

Lorsqu'un élément avec une marge est placé dans un autre élément, l'élément parent ne s'enroule pas toujours de manière cohérente ou contenir cette marge. Cette incohérence semble contre-intuitive, surtout si on la compare au comportement d'autres propriétés telles que la bordure, la position, l'affichage et le débordement.

Marges superposées et effondrement

Intuitivement, on pourrait supposons que l'effondrement des marges, comme décrit dans la spécification CSS, affecte ce comportement. Cependant, malgré l'absence de marges qui se chevauchent et un comportement cohérent entre les navigateurs, la racine de cette incohérence réside ailleurs.

Logique derrière le confinement des marges

La spécification CSS définit en fait ce comportement, bien qu'avec quelques contradictions. Les spécifications traitent à la fois des « marges libres » (marges qui s'étendent au-delà de l'élément parent) et des « marges réduites » (marges adjacentes qui se chevauchent), sans distinguer clairement les conditions dans lesquelles chacune s'applique.

Démo et Conclusion

La démo suivante illustre ce comportement incohérent :

<code class="html"><div class="block">
  <h2 style="margin: 80px;">Is the margin contained (block)?</h2>
</div>
<div class="inline-block">
  <h2 style="margin: 80px;">Is the margin contained (inline-block)?</h2>
</div>
<div class="position-absolute">
  <h2 style="margin: 80px;">Is the margin contained (position-absolute)?</h2>
</div>
<div class="overflow-auto">
  <h2 style="margin: 80px;">Is the margin contained (overflow-auto)?</h2>
</div>
<div class="border">
  <h2 style="margin: 80px;">Is the margin contained (border)?</h2>
</div></code>
Copier après la connexion

L'incohérence est évidente lorsque l'on compare l'élément "block" (avec son comportement de marge par défaut) à tous les autres éléments. Il semble que tout, sauf le comportement par défaut d'un div normal, suppose que la marge est contenue par le parent.

Ce comportement alambiqué provient de l'ambiguïté des spécifications CSS concernant l'effondrement des marges et les marges libres. Malheureusement, la documentation ne fournit pas d'explication claire sur la façon dont ces concepts interagissent avec différentes propriétés d'éléments telles que la bordure, la position et le débordement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal