De bons points déjà faits ici, mais alors qu'il y a beaucoup d'informations sur comment le rendu des marges est effectué par le navigateur, le pourquoi n'a pas encore trouvé de réponse :
"Pourquoi margin-top:-8px n'est pas la même chose que margin-bottom:8px ?"
ce que nous pourrions également demander est :
Pourquoi une marge inférieure positive ne "remonte" pas les éléments précédents, alors qu'une marge supérieure positive "descend" les éléments suivants ?
donc ce que nous voyons c'est qu'il y a différence dans le rendu des marges selon le côté sur lequel elles sont appliquées - les marges supérieures (et gauches) sont différentes des marges inférieures (et droites).
Les choses deviennent plus claires lorsqu'on examine (de manière simplifiée) la manière dont les styles sont appliqués par le navigateur : les éléments sont rendus de haut en bas dans la fenêtre d'affichage, en commençant par le coin supérieur gauche (tenons-nous-en à un rendu vertical pour l'instant, en gardant à l'esprit que le rendu horizontal est traité de la même manière).
Considérons le html suivant :
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
De manière analogue à leur position dans le code, ces trois boîtes apparaissent empilées "de haut en bas" dans le navigateur ( Pour garder les choses simples, nous ne considérerons pas ici la order
propriété du module css3 'flex-box'. ). Ainsi, lorsque les styles sont appliqués à la case 3, les positions des éléments précédents (pour les cases 1 et 2) ont déjà été déterminées et ne doivent plus être modifiées pour des raisons de vitesse de rendu.
imaginez maintenant une marge supérieure de -10px pour la boîte 3. au lieu de décaler vers le haut tous les éléments précédents pour gagner de l'espace, le navigateur va simplement pousser la boîte 3 vers le haut, de sorte qu'elle est rendue au-dessus (ou en dessous, en fonction de l'indice z) de tous les éléments précédents. même si les performances n'étaient pas un problème, déplacer tous les éléments vers le haut pourrait signifier les décaler hors de la fenêtre d'affichage, et donc la position de défilement actuelle devrait être modifiée pour que tout soit à nouveau visible.
Il en va de même pour la marge inférieure de la case 3, qu'elle soit négative ou positive : au lieu d'influencer les éléments déjà évalués, seul un nouveau "point de départ" pour les éléments à venir est déterminé. ainsi, la définition d'une marge inférieure positive poussera la case 3 vers le haut. suivant des éléments vers le bas ; un élément négatif les poussera vers le haut.