css - 為什么父元素不能包裹子元素的margin值?
問(wèn)題描述
p.inside是父元素,h2是其子元素,h2設(shè)置了margin-top:20px;第一張圖片的藍(lán)色區(qū)域,就是父元素的高度,但是從第二張圖片可以看出,父元素的高度沒(méi)有包裹子元素的margin-top,這是為什么啊?
問(wèn)題解答
回答1:這個(gè)問(wèn)題發(fā)生的原因是根據(jù)規(guī)范:一個(gè)盒子如果沒(méi)有上補(bǔ)白(padding-top)和上邊框(border-top),那么這個(gè)盒
子的上邊距會(huì)和其內(nèi)部文檔流中的第一個(gè)子元素的上邊距重疊。
再說(shuō)了白點(diǎn)就是:父元素的第一個(gè)子元素的上邊距margin-top如果碰不到有效的border或者padding.
就會(huì)不斷一層一層的找自己“領(lǐng)導(dǎo)”(父元素,祖先元素)的麻煩。只要給領(lǐng)導(dǎo)設(shè)置個(gè)有效的border或者padding就可以
有效的管制這個(gè)目無(wú)領(lǐng)導(dǎo)的margin防止它越級(jí),假傳圣旨,把自己的margin當(dāng)領(lǐng)導(dǎo)的margin執(zhí)行。對(duì)于垂直外邊距
合并的解決方案上面已經(jīng)解釋了,為父元素例子中的middle元素增加一個(gè)border-top或者padding-top即可解決這
個(gè)問(wèn)題。
詳細(xì)的內(nèi)容參考博文:http://www.cnblogs.com/az96/p...
回答2:父元素的css是怎樣的?
猜測(cè)是,外邊距合并問(wèn)題,看這里
回答3:如果塊級(jí)父元素中,不存在上邊框、上內(nèi)補(bǔ)、inline content、 清除浮動(dòng) 這四條屬性(對(duì)于上邊框和上內(nèi)補(bǔ),也可以說(shuō),當(dāng)上邊距及上內(nèi)補(bǔ)寬度為0時(shí)),那么這個(gè)塊級(jí)元素和其第一個(gè)子元素的上邊距就可以說(shuō)”挨到了一起“。此時(shí)這個(gè)塊級(jí)父元素和其第一個(gè)子元素就會(huì)發(fā)生 上外邊距合并 現(xiàn)象,換句話說(shuō),此時(shí)這個(gè)父元素對(duì)外展現(xiàn)出來(lái)的外邊距將直接變成這個(gè)父元素和其第一個(gè)子元素的margin-top的較大者。類似的,若塊級(jí)父元素的 margin-bottom 與它的最后一個(gè)子元素的margin-bottom 之間沒(méi)有父元素的 border、padding、inline content、height、min-height、 max-height 分隔時(shí),就會(huì)發(fā)生 下外邊距合并 現(xiàn)象。
具體參考margin-collapse
要想解決這個(gè)問(wèn)題,最簡(jiǎn)單的方式是給父元素加上border/padding值。如圖:父元素沒(méi)有加border——
父元素加border——
相關(guān)文章:
1. MySQL 使用 group by 之后然后 IFNULL(COUNT(*),0) 為什么還是會(huì)獲得 null2. mysql 為什么主鍵 id 和 pid 都市索引, id > 10 走索引 time > 10 不走索引?3. wordpress里,這樣的目錄列表是屬于小工具還是啥?4. 我的怎么不顯示啊,話說(shuō)有沒(méi)有QQ群什么的5. 常量在外面不加引號(hào)會(huì)報(bào)錯(cuò)。6. 一直報(bào)這個(gè)錯(cuò)誤7. mysql federated引擎無(wú)法開(kāi)啟8. sublime text3安裝package control失敗9. mysql - 大部分?jǐn)?shù)據(jù)沒(méi)有行溢出的text字段是否需要拆表10. 語(yǔ)法錯(cuò)誤,意外’:’
