摘自css2.1规范中文版
CSS中,两个或者多个盒(可能但不一定是兄弟)的相邻的margin会被结合成一个margin。Margin按这种方式结合叫重叠(collapse)
,产生的结合的margin叫做重叠margin。
摘自css2.1规范中文版
当两个或者更多的margin合并时,产生的margin宽度为合并margin宽度中的最大值。至于负margin,就从正相邻margin的最大值中减去负相邻margin的绝对值的最大值。如果没有正margin,就用0减去相邻margin的绝对值的最大值
摘自css2.1规范中文版
两个margin是相邻的,当且仅当:
都属于流内块级盒,处于同一个块格式化上下文。
没有行盒(line box),没有空隙,没有padding并且没有border把它们隔开(注意,因此某些0高度行盒)
都属于竖直相邻盒边(vertically-adjacent box edges),即来自下列某一对:
1.一个盒的top margin和它的第一个流内子级的top margin
2.一个盒的bottom margin和它的下一个流内后面的兄弟(its next in-flow following sibling)的top margin
3.最后一个流内子级的bottom margin和它的父级的bottom margin,如果父级的高度的计算值为'auto'
4.一个盒的top和bottom margin,该盒没有建立一个新的块格式化上下文并且min-height的计算值为0,height的计算值为0或者'auto',并且没有流内子级
如果一个margin的任何部分margin与另一个margin相邻的话,就认为它与那个margin相邻,是合并(collapsed)margin。
什么是流内元素?如果一个元素是浮动的,绝对定位的或者是根元素,那么它就是流外元素。如果一个元素不是流外的,就叫流内元素。
流内块级盒,就是流内块级元素生成的一个盒。
结论1:根元素的盒子margin不会发生重叠(原因:根元素虽然是块级盒,但不是流内元素)。
举个