2015-11-06 82 views
0

我希望标题不是很混乱。正如你在下面的例子中看到的那样,有一个外部div和一个内部div,我为内部div设置了一个margin-top:100px。在“边缘区域”,默认情况下我们看不到外部div的背景。但是,如果添加overflow:隐藏到外部div,则会显示背景。有人能解释为什么发生这种情况吗为什么overflow:hidden会影响背景对具有顶部/底部边距的嵌套div的div的可见性?

我希望我已经在这里理解了,因为我不是英语母语的人。

$("button").on("click", function() { 
 
    $(".outer").toggleClass("hidden"); 
 
});
div.outer { 
 
    background: red; 
 
    width: 100px; 
 
} 
 
div.outer.hidden { 
 
    overflow: hidden; 
 
} 
 
div.inner { 
 
    margin-top: 100px; 
 
    background: blue; 
 
    height: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
 
    <meta charset="utf-8"> 
 
    <title>JS Bin</title> 
 
</head> 
 

 
<body> 
 
    <div class="outer"> 
 
    <div class="inner"></div> 
 
    </div> 
 
    <br> 
 
    <button>toggle</button> 
 
</body> 
 

 
</html>

回答

0

我相信这是一种叫做margin collapsing结果。

本质上,没有溢出,浏览器正在折叠内部元素的margin-top与容器的margin-top。这是一件糟糕的事情。

当您添加溢出或绝对定位或浮动时,浏览器的崩溃效果不会发生。

the MDN

这些规则适用甚至是零空间,所以一个 第一/最后一个子的边缘(根据上述规则 )是否将其父外结束父母的利润率为零。

+0

这很有道理!谢谢! – zhanziyang

0

“保证金需要一些反弹,因为父公司没有什么可以反弹,它会反弹上面的元素。”

因此,您应该使用填充而不是边距。或者设置外部div的溢出为隐藏汽车

相关问题