CSS中边距margin合并(折叠)问题总结
条件: 1,多个相邻(兄弟或者父子关系)普通流的块元素垂直方向marigin会重叠; 2,必须是处于常规文档流(非float和绝对定位)的块级盒子,并且处于同一个BFC(块格式化上下文)当中; 3,没有空隙(clearance),没有padding和border将他们分隔开; 4,都属于垂直方向上相邻的外边距,可以是下面任意一种情况: a,元素的margin-top与其第一个常规文档流的子元素的margin-top b,元素的margin-bottom与其下一个常规文档流的兄弟元素的margin-top c,height为auto的元素的margin-bottom与其最后一个常规文档流的子元素的margin-bottom d,高度为0并且最小高度也为0,不包含常规文档流的子元素,并且自身没有建立新的BFC的元素的margin-top和margin-bottom 5,绝对定位元素,float元素,inline-box元素,overflow : hidden不会和垂直方向上的其他元素margin折叠–其实就是可以生成新的BFC; 6,元素自身的 margin-bottom 和 margin-top 相邻时也会折叠。
折叠规则: 1,两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。, 2,两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。 3,两个外边距一正一负时,折叠结果是两者的相加的和。
不想折叠的挽救方法: 1,给父元素div设置边框或少量的padding或设置overflow(其实是生成了一个新的BFC) 2,采用padding布局