Fusion des marges

Les marges haute et basse des blocs sont parfois fusionnées en une seule marge dont la taille est la plus grande des deux marges fusionnées. C'est ce qu'on appelle la fusion des marges.

La fusion des marges se produit si on a l'un de ces trois cas :

Des éléments voisins adjacents

Les marges des éléments voisins adjacents sont fusionnés (sauf quand le dernier voisin doit passer à la ligne pour dégager les flottements). Ainsi :

html
<p>La marge basse de ce paragraphe est fusionnée…</p>
<p>… avec la marge haute de celui-ci.</p>
Aucun contenu séparant le parent et ses descendants

S'il n'y a aucune bordure, remplissage, contenu en ligne (inline), lorsqu' un contexte de formatage de blocs est créé ou dégagement pour séparer la marge haute d'un bloc avec la marge haute d'un ou plusieurs des blocs descendants ou quand il n'y a aucune bordure, remplissage, contenu en ligne, height, min-height ou max-height pour séparer la marge basse d'un bloc avec la marge basse d'un ou plusieurs des blocs descendants, ces marges sont fusionnées. La marge fusionnée termine en dehors de l'élément parent.

Des blocs vides

S'il n'y a aucune bordure, remplissage, contenu en ligne, height ou min-height pour séparer la marge haute d'un bloc de sa marge basse, ces deux marges sont fusionnées.

On peut avoir des cas de fusion plus complexes lorsque ces cas de figures sont combinés.

Ces règles s'appliquent également lorsque les marges sont égales à 0. Ainsi, la marge d'une descendant finit toujours en dehors de l'élément parent (selon la deuxième règle vue ci-avant) quelle que soit la marge de l'élément parent (nulle ou non).

Lorsqu'on manipule des marges négatives, la taille de la marge fusionnée est la somme de la marge positive la plus grande et de la marge négative la plus petite (celle dont la valeur est plus éloignée de 0).

Les marges des éléments flottants et positionnés de façon absolue ne sont jamais fusionnées.

Exemples

HTML

html
<p>La marge basse de ce paragraphe est fusionnée…</p>
<p>
  … avec la marge haute de ce paragraphe. On a donc une marge de
  <code>1.2rem</code> entre les deux.
</p>

<div>
  Cet élément contient deux paragraphes !
  <p>
    Celui-ci a une marge de <code>.4rem</code> par rapport au texte ci-dessus.
  </p>
  <p>
    La marge basse de cet élément fusionne avec la marge basse de l'élément
    parent. On a donc <code>2rem</code> de marge.
  </p>
</div>

<p>Bip bap bop.</p>

CSS

css
div {
  margin: 2rem 0;
  background: lavender;
}

p {
  margin: 0.4rem 0 1.2rem 0;
  background: yellow;
}

Résultat

Spécifications

{{Specifications}}

Voir aussi