1. 程式人生 > >子元素設定margin-top影響父級元素的位置(轉發)

子元素設定margin-top影響父級元素的位置(轉發)

前提:子元素要是塊級元素;

———————————————————————————————————

相信很多前端同學在做頁面開發的時候都遇到過這樣的問題。給一個div內部的div設定一個margin-top,結果它的父級跟著它一起下移了。如下面的程式碼

    .a {         width:100px;         height:100px;     }     .b {         width:50px;         height:50px;         margin-top:10px;     }           <div class="a">         <div class="b"></div>     </div>

效果是這樣的

但是其實我們期望的效果是這樣的

為什麼會產生這樣的效果呢?這要談到css的盒模型margin的合併問題

css在盒模型中規定

    In this specification, the expression collapsing margins means that adjoining margins (no non-empty content, padding or border areas or clearance separate them) of two or more boxes (which may be next to one another or nested) combine to form a single margin. 所有毗鄰的兩個或更多盒元素的margin將會合併為一個margin共享之。毗鄰的定義為:同級或者巢狀的盒元素,並且它們之間沒有非空內容、Padding或Border分隔。

其實很多小夥伴都知道css有這樣一個規定。只是我們只關注了相鄰div之間的margin合併而沒有考慮父級和子集的合併。我們一定要注意,巢狀也屬於毗鄰的喲。

那麼怎麼解決這個問題呢?這裡提供這樣幾種方法:

    讓父級具有“包裹性”     將父級over-flow設為hidden     將父級display設為inline-block     將父級float或absolute     改變父級的結構     給父元素設定padding     給父元素設定透明border

另一種解釋:

          這個問題發生的原因是根據規範,一個盒子如果沒有上補白(padding-top)和上邊框(border-top),那麼這個盒子的上邊距會  和其內部文件流中的第一個子元素的上邊距重疊。

       再說白點就是:父元素的第一個子元素的上邊距margin-top如果碰不到有效的border或者padding.就會不斷一層一層的找自    己“領導”(父元素,祖先元素)的麻煩。只要給領導設定個有效的 border或者padding就可以有效的管制這個目無領導的  margin 它越級,假傳聖旨,把自己的margin當領導的margin執行。 --------------------- 作者:學後臺做前端 來源:CSDN 原文:https://blog.csdn.net/hahhahahaa/article/details/80676873 版權宣告:本文為博主原創文章,轉載請附上博文連結!