Ya se han hecho buenos puntos aquí, pero si bien hay mucha información sobre cómo el navegador logra la representación de los márgenes, el por qué aún no se ha respondido del todo:
"¿Por qué margin-top: -8px no es lo mismo que margin-bottom: 8px?"
lo que también podríamos preguntar es:
¿Por qué un margen inferior positivo no "sube" los elementos precedentes, mientras que un margen superior positivo "baja" los elementos siguientes?
así que lo que vemos es que hay una diferencia en la representación de los márgenes dependiendo del lado al que se aplican : los márgenes superior (e izquierdo) son diferentes de los inferiores (y derecho).
Las cosas se vuelven más claras cuando se tiene una mirada (simplificada) de cómo el navegador aplica los estilos: los elementos se representan de arriba hacia abajo en la ventana gráfica, comenzando en la esquina superior izquierda (sigamos con la representación vertical por ahora, teniendo en cuenta que el horizontal se trata igual).
considere el siguiente html:
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
De manera análoga a su posición en el código, estas tres cajas aparecen apiladas 'de arriba hacia abajo' en el navegador ( manteniendo las cosas simples, no consideraremos aquí la order
propiedad del módulo css3 'flex-box' ). por lo tanto, siempre que se apliquen estilos a la casilla 3, las posiciones del elemento anterior (para las casillas 1 y 2) ya se han determinado y no deben modificarse más por el bien de la velocidad de renderizado.
ahora, imagine un margen superior de -10px para el cuadro 3. en lugar de desplazar hacia arriba todos los elementos anteriores para reunir algo de espacio, el navegador simplemente empujará el cuadro 3 hacia arriba, por lo que se representa en la parte superior (o debajo, según el índice z ) cualquier elemento anterior. incluso si el rendimiento no fuera un problema, mover todos los elementos hacia arriba podría significar desplazarlos fuera de la ventana gráfica, por lo que la posición de desplazamiento actual tendría que modificarse para que todo vuelva a estar visible.
Lo mismo se aplica a un margen inferior para el recuadro 3, tanto negativo como positivo: en lugar de influir en los elementos ya evaluados, solo se determina un nuevo "punto de partida" para los elementos futuros. así, establecer un margen inferior positivo empujará hacia abajo los siguientes elementos; uno negativo los empujará hacia arriba.
onset
yoffset
. Es cierto que muchas personas siempre usan la palabraoffset
( negativo ) cuando quieren decironset
( positivo ). Este mensaje se autodestruirá si actualiza su respuesta. ¡Salud!