10 09/2014

Collapsing margins

最后更新: Wed Sep 10 2014 12:29:11 GMT+0800




  • 标题

    文字






  • 标题

    文字





html 代码

<ul id="collapsing-margins-div" style="margin: 0;padding: 0;list-style: none;background:red;">
    <li style="float:left;width:50%;">
        <div style="background:green" class="wrapper">
            <h3>标题</h3><p>文字</p>
        </div>
    </li>
    <li style="float:left;width:50%;">
        <div style="background:blue" class="wrapper">
            <h3>标题</h3><p>文字</p>
        </div>
    </li>    
    <div style="clear:both;"></div>
</ul>
<style>
#collapsing-margins-div li:hover {background-color: #333;}
</style>

问题

注意:那个莫名其妙的 红边,实际上是由 h3 的 margin-top 产生的!

#collapsing-margins-div h3 {margin-top: 0;}

难道这就是传说中的 collapsing-margins

h1 {
  margin: 0 0 25px 0;
  background: #cfc;
}
p {
  margin: 20px 0 0 0;
  background: #cf9;
}

collapsing-margins

简单的说:上下两个相邻元素之间的 margin 会合并为大的那个!除非发生以下情况之一

  • float 浮动
  • position:absolute
  • inline-block
  • 父元素 overflow:auto 或者 overflow:scroll 或者 overflow:visible
  • clear:xxx
  • root element

结论

这就是为什么 gs-accordin.less 中出现下面的

//fix inside first and last elements overflow parent!!
parent {
    :first-child {margin-top:0 !important;margin-left:0 !important;}
    :last-child {margin-bottom:0 !important;margin-right:0 !important;}
}

当然,上面那些 float,display:inline-block 等办法也可以。

参考:

http://reference.sitepoint.com/css/collapsingmargins