Los márgenes negativos son válidos en CSS y la comprensión de su comportamiento (compatible) se basa principalmente en el modelo de caja y el colapso de los márgenes. Si bien ciertos escenarios son más complejos, se pueden evitar muchos errores comunes después de estudiar la especificación.
Por ejemplo, la representación de su código de muestra está guiada por la especificación css como se describe en el cálculo de alturas y márgenes para elementos no reemplazados absolutamente posicionados .
Si tuviera que hacer una representación gráfica, probablemente iría con algo como esto (no a escala):
El cuadro de margen se pierde 8px
en la parte superior, sin embargo, esto no afecta el contenido y los cuadros de relleno . Debido a que su elemento está absolutamente posicionado, mover el elemento 8px hacia arriba no causa ninguna alteración adicional en el diseño; con contenido de flujo de entrada estático, ese no es siempre el caso.
Prima:
¿Todavía necesitas convencerte de que leer las especificaciones es el camino a seguir (a diferencia de artículos como este )? Veo que estás intentando centrar verticalmente el elemento, entonces, ¿por qué tienes que configurarlo margin-top:-8px;
y no margin-top:-50%;
?
Bueno, el centrado vertical en CSS es más difícil de lo que debería ser . Al establecer incluso los márgenes superior o inferior en%, el valor se calcula como un porcentaje siempre relativo al ancho del bloque contenedor . Este es un error bastante común y la peculiaridad rara vez se describe fuera de w3 docos
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!margin-bottom: -8px;
? ¿Por quémargin-bottom:-8px
no es lo mismo quemargin-top:-8px
?Un margen superior de -8px significa que será 8px más alto que si tuviera un margen 0.
Un margen inferior de 8px significa que lo que está debajo estará 8px más abajo que si tuviera un margen de 0.
fuente
margin-bottom: -8px;
? ¿Por quémargin-bottom:-8px
no es lo mismo quemargin-top:-8px
?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:
lo que también podríamos preguntar es:
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:
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.
fuente
Debido a que ha utilizado el posicionamiento absoluto y ha especificado un porcentaje superior, solo margin-top afectará la ubicación de su objeto .item. Si, en cambio, lo colocó usando bottom: 50%, entonces necesitaría margin-bottom -8px para centrarlo, y margin-top no tendría ningún efecto.
El margen afecta los límites de un elemento en términos de posicionamiento, ya sea absolutamente como en su caso, o en relación con los elementos vecinos. Imagina que ese margen es la base de tu elemento sobre el que se asienta. Por lo general, tienen el mismo tamaño, pero pueden agrandarse o reducirse en cualquiera o en todos los cuatro bordes.
Su CSS le dice al navegador que coloque la parte superior de su elemento en el margen en un punto del 50% del camino hacia abajo en la página. Sin embargo, como todos los elementos no son un solo píxel, el navegador necesita saber qué parte alinear el 50% del camino hacia abajo en la página. Para alinear la parte superior del elemento, utiliza el margen superior. De forma predeterminada, esto está en línea con la parte superior del elemento, pero puede modificarlo con CSS.
En su caso, el 50% superior daría como resultado que la parte superior del elemento comenzara en el medio de la página. Al aplicar un margen superior negativo, el navegador usa el punto 8px en el elemento desde la parte superior (es decir, la línea en el medio) como el lugar para posicionar al 50%.
Si aplica un margen positivo en la parte inferior, esto extiende la línea que el navegador usa para colocar la parte inferior lejos del elemento en sí, dando un espacio entre él y cualquier elemento adyacente debajo, o afectando dónde se coloca absolutamente si el posicionamiento se basa en El fondo.
fuente
Me pregunto si esta pregunta se ha respondido bien: cómo funcionan los márgenes CSS y por qué es ese margin-top: -5; no es lo mismo que margin-bottom: 5 ;?
El margen es la distancia del entorno del elemento. margin-top dice "... distancia desde el entorno cuando medimos desde el 'lado' superior de la 'caja' del elemento y margin-bottom es la distancia desde el 'lado' inferior de la 'caja'". Luego margin-top: 5; se refiere al perímetro 'lateral' superior, -5 en ese caso; cualquier cosa que se acerque desde el 'lado' superior puede superponerse al 'lado' superior del elemento en 5, y el margen inferior: 5; significa que la distancia entre la parte inferior del elemento y el entorno es 5.
Básicamente eso, pero afectado por elementos flotantes y similares: http://www.w3.org/TR/CSS2/box.html#margin-properties .
http://coding.smashingmagazine.com/2009/07/27/the-definitive-guide-to-using-negative-margins/
Estoy para que me corrijan.
fuente