margin重叠
margin重叠的计算规则
什么是相邻的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.都属于流内块级盒,处于同一个块格式化上下文。
什么是流内元素?如果一个元素是浮动的,绝对定位的或者是根元素,那么它就是流外元素。如果一个元素不是流外的,就叫流内元素。
流内块级盒,就是流内块级元素生成的一个盒。
结论1:根元素的盒子margin不会发生重叠(原因:根元素虽然是块级盒,但不是流内元素)。
举个