2015-11-06 48 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的溢出爲隱藏汽車

相關問題