2013-01-08 63 views
5

我有一段代码,看起来像这样:为什么我需要这些div的边框才能正确渲染?

<div class="header"> 
</div> 
<div class="right-gradient"> 
    <div class="left-gradient"> 
     @RenderBody() 
    </div> 
</div> 

.right-gradient 
{ 
    background: url('Images/RightGradient.png') repeat-y right top transparent; 
} 
.left-gradient 
{ 
    background: url('Images/RightGradient.png') repeat-y left top transparent; 
} 

应该导致这样的事情:

 
|-------------------| 
|##### Header ######| 
|-------------------| 
|//    \\| 
|// Content \\| 
|//    \\| 
|//    \\| 
--------------------- 

然而它,而不是呈现这样的:

 
|-------------------| 
|##### Header ######| 
|-------------------| 
|     | - Note the extra space here 
|//    \\| 
|// Content \\| 
|//    \\| 
|//    \\| 
--------------------- 

虽然试图找出标题和内容之间的额外空间来自哪里,我发现添加一个边框到我的div实际上纠正解决问题并删除标题和内容之间的违规空间。

.right-gradient 
{ 
    background: url('Images/RightGradient.png') repeat-y right top transparent; 
    border: 1px red solid; 
} 
.left-gradient 
{ 
    background: url('Images/RightGradient.png') repeat-y left top transparent; 
    border: 1px blue solid; 
} 

这是为什么?

jsfiddle with sample code reproducing the problem

+0

请张贴与代码的jsfiddle。 –

+0

你的divs有没有利润空间? –

+3

听起来像一个边缘崩溃。内容块中的第一个元素具有顶部边距。向内容块添加边框可防止边距塌陷。 – cimmanon

回答

4

简而言之,您的利润率已经崩溃。 MDN具有的现象说明:

如果没有边框,填充,内嵌的内容,或间隙分离与它的第一个子块的边距,或无边框块的上边距,填充,内联内容,高度,最小高度或最大高度将块的边缘底部与其最后一个子块的边缘底部分开,然后这些边距将折叠。折叠后的保证金最终在家长之外。

来源:https://developer.mozilla.org/en-US/docs/CSS/margin_collapsing

1

如果你google一下,不知道它的bug或正是为什么它会发生,虽然这个问题是非常有据可查的。

尝试overflow:hidden;摆脱空间而不必添加边框。

+0

使用'overflow:hidden;'确实工作,虽然我很好奇为什么我首先需要做到这一点。我怀疑[cimmanon的评论](http://stackoverflow.com/questions/14223638/why-do-i-need-a-border-for-these-divs-to-render-correctly/14223722#comment19729813_14223638)是什么结果在我的问题:) – Rachel

+3

是的http://stackoverflow.com/questions/6204670/css-clean-solution-to-the-margin-collapse-issue-when-floating-an-element – Jason

相关问题