margin重叠

摘自css2.1规范中文版

CSS中,两个或者多个盒(可能但不一定是兄弟)的相邻的margin会被结合成一个margin。Margin按这种方式结合叫重叠(collapse)
,产生的结合的margin叫做重叠margin。

margin重叠的计算规则

摘自css2.1规范中文版

当两个或者更多的margin合并时,产生的margin宽度为合并margin宽度中的最大值。至于负margin,就从正相邻margin的最大值中减去负相邻margin的绝对值的最大值。如果没有正margin,就用0减去相邻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不会发生重叠(原因:根元素虽然是块级盒,但不是流内元素)。

举个

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!