bons points déjà soulevés ici, mais bien qu'il y ait beaucoup d'informations sur la façon dont le rendu des marges est accompli par le navigateur, le pourquoi n'est pas encore tout à fait répondu:
"Pourquoi margin-top: -8px est-il différent de margin-bottom: 8px?"
ce que nous pourrions également demander, c'est:
Pourquoi une marge inférieure positive ne «saute-t-elle pas» sur les éléments précédents, alors qu'une marge supérieure positive «renverse» les éléments suivants?
donc ce que nous voyons, c'est qu'il y a une différence dans le rendu des marges selon le côté auquel elles sont appliquées - les marges du haut (et de gauche) sont différentes de celles du bas (et de droite).
les choses deviennent plus claires lorsqu'on regarde (simplifié) comment les styles sont appliqués par le navigateur: les éléments sont rendus de haut en bas dans la fenêtre, en commençant dans le coin supérieur gauche (restons fidèles au rendu vertical pour le moment, en gardant à l'esprit que l'horizontale est traitée de la même manière).
considérez 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 cases apparaissent empilées «de haut en bas» dans le navigateur ( pour simplifier les choses, nous ne considérerons pas ici la order
propriété du module css3 «flex-box» ). ainsi, chaque fois que des styles sont appliqués à la boîte 3, les positions des éléments précédents (pour les boîtes 1 et 2) ont déjà été déterminées et ne devraient plus être modifiées pour des raisons de vitesse de rendu.
maintenant, imaginez une marge supérieure de -10px pour la boîte 3. au lieu de déplacer tous les éléments précédents pour gagner de l'espace, le navigateur poussera simplement la boîte 3 vers le haut, donc elle est rendue au-dessus de (ou en dessous, selon le z-index ) tout élément précédent. même si les performances n'étaient pas un problème, déplacer tous les éléments vers le haut pourrait signifier les déplacer hors de la fenêtre, de sorte que la position de défilement actuelle devrait être modifiée pour que tout soit à nouveau visible.
il en va de même pour une marge inférieure pour la case 3, à la fois négative et positive: au lieu d'influencer des éléments déjà évalués, seul un nouveau «point de départ» pour les éléments à venir est déterminé. ainsi définir une marge inférieure positive poussera les éléments suivants vers le bas; un négatif les poussera vers le haut.
onset
etoffset
. C'est vrai que beaucoup de gens utilisent toujours le motoffset
( négatif ) quand ils veulent direonset
( positif ). Ce message s'autodétruira si vous mettez à jour votre réponse. À votre santé!