【问题标题】:How this float div is getting top margin when wrapper div has no border?当包装 div 没有边框时,这个浮动 div 如何获得上边距?
【发布时间】:2012-02-17 15:29:34
【问题描述】:

请注意,我不是在询问是否解决问题,而是我想知道当包装 div 设置为 0px 边框时,浮动 div 是如何获得边距的。但是,当包装 div 设置了 1px 边框时,浮动 div 不会获得边距,但在这两种情况下,secondDiv 都会按预期获得上边距。

请注意,我了解边缘折叠主题,但它与设置边框有什么关系?

<div id="container">    
    <div id="firstDiv">FIRST Div inside CONTAINER</div>
    <div id="secondDiv">SECOND Div inside CONTAINER</div>
</div>


body{
    width: 780px;
    margin: 00px auto;
}
#container {
    border: 1px solid orange;   /* but when its set to 0px then floated div gets margin too*/
}
#firstDiv{         
    float:left;
}
#secondDiv{  
     margin: 14px;        
}

http://jsfiddle.net/dmpxw/

现在,如果包装 div 的边框设置为 0px,那么浮动也会被向下推。但我认为它不应该像以前那样留在那里吗?

http://jsfiddle.net/dmpxw/1/

【问题讨论】:

    标签: css css-float margins


    【解决方案1】:

    这很有趣。

    当容器有边框时,第二个内部 div 的边距从边框开始运行 - 即边距从边框开始应用。这是因为边框是在边距测量之前应用的最后一项。

    当容器没有边框时,第二个内部 div 的边距从最后一项开始,也就是现在的 body。所以边距现在在容器的外面,所以容器现在实际上在页面的下方 - 第一个内部 div 没有边距,并且就在容器的顶部 - 它是容器本身移动到了第二个案例。

    如果您为示例添加背景颜色,您可以看到当您有边框时,边距位于容器内,而当您没有边框时,边距位于容器外。 View the example on JSFiddle.

    【讨论】:

    • 但是即使容器设置为 margin-top 以提供包含 div 的参考框架,这种效果如何保持不变? jsfiddle.net/dmpxw/2
    • 边距可以愉快地相互叠放,但边距不会越过另一个元素、它的内边距或它的边框。
    • 我了解到的是 overflow:hidden 创建了新的 BFC,但它也不起作用并将 firstDiv 向下推。 jsfiddle.net/dmpxw/3
    猜你喜欢
    • 2013-02-10
    • 2021-09-26
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    相关资源
    最近更新 更多