margin设置为负值之后,会影响父容器给它分配空间的大小:
如: 父容器div中, 有3个子div, 父容器设置float属性为left
>>> 父容器宽度210px, 子容器宽度均为100px, 渲染效果: div1-div2并列渲染在第一行, div3靠左渲染在第2行。
原因:
>>> 如果父容器足够宽, div1-2-3向左浮动,依次渲染在父容器的第一行。
>>> 因为父容器210px的宽度,渲染完div1-2后只剩下10px, 不够渲染div3, 所以div3渲染在了第二行。
>>> 给div3设置 margin-right:-95px; 发现div3渲染在了父容器的第一行div2的后面。
原因:
>>> margin-right设置为负值,会把其右侧的元素拉过来,即让右侧元素左移。
之所以会这样,是因为: 父容器将分配给该元素的空间,从右边开始释放了设定值个大小的像素,供右侧元素使用。
>>> 当margin-right=-95px后, 原本要给该元素分配100px的空间, 释放95px后,现在只需要5px的空间就够了。
第一行空间分配给div1-2后, 还剩10px, 够给div3分配了, 所以div3不会换行, 而是向左浮动到div2的右侧!
>>> margin设置负值, 只会影响父元素给其分配的空间的大小, 不会影响该元素渲染时的真正宽高!
>>> 负值, 父容器会缩小给该子元素分配的空间。
>>> 正值, 父容器会扩大给该子元素分配的空间。
>>> 至于设置margin-top|bottom|left|right, 只是规定了父元素在缩小该元素分配空间时,是从哪个方位缩小的。
基于以上设置margin的原理,希望对你有所帮助。