1.margin移动的参考基线分析:盒子的实际尺寸=盒子的物理尺寸+正margin(物理尺寸是指没有margin的盒子的尺寸,也就是框的大小,包括边框)如果为负值top或left值将导致框向上或向左移动,负bottom或right将影响下方框的显示指南。2.负margin-bottom没有设置高度的块元素,它的高度是自动的,具体由它里面文档流的最终位置决定。如果margin-bottom为负值,会导致元素的边框缩小,其效果只会影响文档流的边框。文档流边界的减少将产生以下两个效果。1.后面的元素会占据收缩产生的那部分文档流,从而形成后面的元素覆盖前面的元素的效果。2.当父元素没有指定高度时,父元素的边界会向上收缩,即它的父元素的边界在子元素的边界之上。总之:margin-bottom为负值只会影响父元素的高度(前提是父元素没有明确指定高度),而不能影响子元素本身的高度!3.负的margin-rightmargin-right只会改变元素本身的高度宽度(前提是父元素的大小固定,子元素的宽度没有设置),父元素的宽度不会被修改。在这种情况下,负的margin-left也会改变元素本身的宽度。为什么负margin-right/margin-left改变元素宽度?因为如果P是块元素,没有指定宽度,那么p的width+padding+border+margin=父div的宽度(这里说的是水平方向)。这里假设padding和border为0,父div宽度为400px。p的宽度是继承的。如果不设置margin,p的宽度为400px。当margin-left:-100px;时,p.width+(-100px)=400px。因此,p的宽度变为500px。这里说的p假设是inheritwidth。如果指定了p的宽度,margin-left和margin-top为负值会导致p元素的位置发生变化。4、负边距的应用多列等高布局(原理:负边距-底部)body,p{margin:0;填充:0;}#testdiv{溢出:隐藏;宽度:660px;margin:0auto;}#left,#center,#right{margin-bottom:-400px;padding-bottom:400px;}#left{float:left;宽度:180px;背景:#777;}#center{浮动:左;宽度:300px;背景:#888;}#right{浮动:正确;宽度:180px;背景:#999;}p{颜色:#FFF;文本对齐:居中
