Une astuce courante pour les éléments de positionnement vertical consiste à utiliser le CSS suivant:
.item {
position:absolute;
top:50%;
margin-top:-8px; /* half of height */
height: 16px;
}
Lorsque vous le voyez dans la vue métrique comme dans Chrome, voici ce que vous voyez:
Cependant, il n'y a pas de marge visuelle représentée lorsque vous survolez l'élément, c'est-à-dire que la marge est «à l'extérieur» de la bordure et peut être visualisée. Mais les marges négatives n'apparaissent pas. À quoi ressemblent-ils et qu'est-ce qui le rend différent?
Pourquoi n'est-ce margin-top:-8px
pas la même chose que margin-bottom:8px
?
Alors, comment fonctionnent les marges négatives et quelle est l'intuition derrière elles. Comment font-ils «remonter» (en cas de margin-top < 0
) un objet?
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é!margin-bottom: -8px;
? Pourquoi n'est-cemargin-bottom:-8px
pas la même chose quemargin-top:-8px
?Une marge supérieure de -8px signifie qu'elle sera 8px plus élevée que si elle avait 0 marge.
Une marge inférieure de 8px signifie que la chose en dessous sera 8px plus bas que si elle avait 0 marge.
la source
margin-bottom: -8px;
? Pourquoi n'est-cemargin-bottom:-8px
pas la même chose quemargin-top:-8px
?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:
ce que nous pourrions également demander, c'est:
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:
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.
la source
Étant donné que vous avez utilisé le positionnement absolu et spécifié un pourcentage supérieur, seule la marge supérieure affectera l'emplacement de votre objet .item. Si à la place vous le positionniez en utilisant bottom: 50%, alors vous auriez besoin de margin-bottom -8px pour le centrer, et margin-top n'aurait aucun effet.
La marge affecte les limites d'un élément en termes de positionnement, soit absolument comme dans votre cas, soit par rapport aux éléments voisins. Imaginez que la marge soit le fondement de votre élément sur lequel il repose. Ils sont généralement de la même taille, mais peuvent être agrandis ou plus petits sur l'un ou l'ensemble des quatre bords.
Votre CSS indique au navigateur de positionner le haut de votre élément, la marge à un point situé à 50% du bas de la page. Cependant, comme tous les éléments ne sont pas un seul pixel, le navigateur a besoin de savoir quelle partie doit s'aligner sur 50% du bas de la page. Pour aligner le haut de l'élément, il utilise la marge supérieure. Par défaut, cela correspond au haut de l'élément, mais vous pouvez le modifier avec CSS.
Dans votre cas, les 50% supérieurs entraîneraient le début du haut de l'élément au milieu de la page. En appliquant une marge supérieure négative, le navigateur utilise le point 8px dans l'élément à partir du haut (c'est-à-dire la ligne au milieu de celui-ci) comme emplacement à 50%.
Si vous appliquez une marge positive vers le bas, cela prolonge la ligne que le navigateur utilise pour positionner le bas à l'écart de l'élément lui-même, ce qui laisse un espace entre celui-ci et tout élément adjacent ci-dessous, ou affecte l'endroit où il est placé absolument si le positionnement est basé sur le fond.
la source
Je me demande si on a bien répondu à cette question: comment fonctionnent les marges css et pourquoi est-ce que margin-top: -5; n'est pas la même chose que margin-bottom: 5 ;?
La marge correspond à la distance par rapport aux environs de l'élément. margin-top dit "... la distance par rapport aux environs lorsque nous mesurons à partir du" côté "supérieur de la" boîte "de l'élément et la marge inférieure étant la distance du" côté "inférieur de la" boîte "". Puis margin-top: 5; concerne le périmètre «latéral» supérieur, -5 dans ce cas; tout ce qui s'approche du «côté» supérieur peut chevaucher le «côté» supérieur de l'élément de 5, et la marge inférieure: 5; signifie que la distance entre le «côté» inférieur de l'élément et l'entourage est de 5.
Fondamentalement, cela, mais affecté par les éléments flottants et autres: http://www.w3.org/TR/CSS2/box.html#margin-properties .
http://coding.smashingmagazine.com/2009/07/27/the-definitive-guide-to-using-negative-margins/
Je tiens à être corrigé.
la source