CSS 外邊距(margin)重疊及防止方法
兩個(gè)或多個(gè)塊級(jí)盒子的垂直相鄰邊界會(huì)重合。結(jié)果的邊界寬度是相鄰邊界寬度中最大的值。如果出現(xiàn)負(fù)邊界,則在最大的正邊界中減去絕對(duì)值最大的負(fù)邊界。如果沒(méi)有正邊界,則從零中減去絕對(duì)值最大的負(fù)邊界。注意:相鄰的盒子可能并非是由父子關(guān)系或同胞關(guān)系的元素生成。
但是邊界的重疊也有例外情況:
1、水平邊距永遠(yuǎn)不會(huì)重合。
2、在規(guī)范文檔中,2個(gè)或以上的塊級(jí)盒模型相鄰的垂直margin會(huì)重疊。最終的margin值計(jì)算方法如下:
a、全部都為正值,取最大者;
b、不全是正值,則都取絕對(duì)值,然后用正值減去最大值;
c、沒(méi)有正值,則都取絕對(duì)值,然后用0減去最大值。
注意:相鄰的盒模型可能由DOM元素動(dòng)態(tài)產(chǎn)生并沒(méi)有相鄰或繼承關(guān)系。
3、相鄰的盒模型中,如果其中的一個(gè)是浮動(dòng)的(float),垂直margin不會(huì)重疊,并且浮動(dòng)的盒模型和它的子元素之間也是這樣。
4、設(shè)置了overflow屬性的元素和它的子元素之間的margin不被重疊(overflow取值為visible除外)。
5、設(shè)置了絕對(duì)定位(position:absolute)的盒模型,垂直margin不會(huì)被重疊,并且和他們的子元素之間也是一樣。
6、設(shè)置了display:inline-block的元素,垂直margin不會(huì)重疊,甚至和他們的子元素之間也是一樣。
7、如果一個(gè)盒模型的上下margin相鄰,這時(shí)它的margin可能重疊覆蓋(collapse through)它。在這種情況下,元素的位置(position)取決于它的相鄰元素的margin是否重疊。
a、如果元素的margin和它的父元素的margin-top重疊在一起,盒模型border-top的邊界定義和它的父元素相同。
b、另外,任意元素的父元素不參與margin的重疊,或者說(shuō)只有父元素的margin-bottom是參與計(jì)算的。如果元素的border-top非零,那么元素的border-top邊界位置和原來(lái)一樣。
一個(gè)應(yīng)用了清除操作的元素的margin-top絕不會(huì)和它的塊級(jí)父元素的margin-bottom重疊。
注意,那些已經(jīng)被重疊覆蓋的元素的位置對(duì)其他已經(jīng)重疊的元素的位置沒(méi)有任何影響;只有在對(duì)這些元素的子元素定位時(shí),border-top邊界位置才是必需的。
8、根元素的垂直margin不會(huì)被重疊。
外邊距(margin)重疊示例
外邊距重疊是指兩個(gè)垂直相鄰的塊級(jí)元素,當(dāng)上下兩個(gè)邊距相遇時(shí),起外邊距會(huì)產(chǎn)生重疊現(xiàn)象,且重疊后的外邊距,等于其中較大者。
為了幫助大家讓學(xué)習(xí)變得輕松、高效,給大家免費(fèi)分享一大批資料,幫助大家在成為前端工程師,乃至全棧工程師的路上披荊斬棘。在這里給大家推薦一個(gè)前端全棧學(xué)習(xí)交流圈:784783012 歡迎大家進(jìn)群交流討論,學(xué)習(xí)交流,共同進(jìn)步。
當(dāng)真正開始學(xué)習(xí)的時(shí)候難免不知道從哪入手,導(dǎo)致效率低下影響繼續(xù)學(xué)習(xí)的信心。
但最重要的是不知道哪些技術(shù)需要重點(diǎn)掌握,學(xué)習(xí)時(shí)頻繁踩坑,最終浪費(fèi)大量時(shí)間,所以有效資源還是很有必要的。
圖示:
另一個(gè)重疊現(xiàn)象是當(dāng)一個(gè)元素包含在另一個(gè)元素之中時(shí),子元素與父元素之間也會(huì)產(chǎn)生重疊現(xiàn)象,重疊后的外邊距,等于其中最大者:

同理,如果一個(gè)無(wú)內(nèi)容的空元素,其自身上下邊距也會(huì)產(chǎn)生重疊。
外邊距重疊的意義
外邊距的重疊只產(chǎn)生在普通流文檔的上下外邊距之間,這個(gè)看起來(lái)有點(diǎn)奇怪的規(guī)則,其實(shí)有其現(xiàn)實(shí)意義。設(shè)想,當(dāng)我們上下排列一系列規(guī)則的塊級(jí)元素(如段落P)時(shí),那么塊元素之間因?yàn)橥膺吘嘀丿B的存在,段落之間就不會(huì)產(chǎn)生雙倍的距離。
防止外邊距重疊解決方案:
雖然外邊距的重疊有其一定的意義,但有時(shí)候我們?cè)谠O(shè)計(jì)上卻不想讓元素之間產(chǎn)生重疊,那么可以有如下幾個(gè)建議可供參考:
- 外層元素padding代替
- 內(nèi)層元素透明邊框 border:1px solid transparent;
- 內(nèi)層元素絕對(duì)定位 postion:absolute:
- 外層元素 overflow:hidden;
- 內(nèi)層元素 加float:left;或display:inline-block;
- 內(nèi)層元素padding:1px;
總結(jié)
以上所述是小編給大家介紹的CSS 外邊距(margin)重疊及防止方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章

使用CSS實(shí)現(xiàn)三欄自適應(yīng)布局(兩邊寬度固定,中間自適應(yīng))
這篇文章主要介紹了使用CSS實(shí)現(xiàn)三欄自適應(yīng)布局(兩邊寬度固定,中間自適應(yīng)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下2020-06-02
CSS實(shí)現(xiàn)三欄布局中間一欄自適應(yīng)且隨文字大小變化寬度的示例代碼
這篇文章主要介紹了CSS實(shí)現(xiàn)三欄布局中間一欄自適應(yīng)且隨文字大小變化寬度的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需2020-06-02
CSS columns實(shí)現(xiàn)兩端對(duì)齊布局的示例代碼
這篇文章主要介紹了CSS columns實(shí)現(xiàn)兩端對(duì)齊布局效果,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-28
用CSS Grid布局制作一個(gè)響應(yīng)式柱狀圖的實(shí)現(xiàn)
這篇文章主要介紹了用CSS Grid布局制作一個(gè)響應(yīng)式柱狀圖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編2020-05-26
這篇文章主要介紹了CCS中的margin:top塌陷問(wèn)題,本文通過(guò)實(shí)例截圖給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-27
css如何利用負(fù)margin技術(shù)實(shí)現(xiàn)平均布局
這篇文章主要介紹了css如何利用負(fù)margin技術(shù)實(shí)現(xiàn)平均布局,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一2020-03-09
這篇文章主要介紹了解決margin 外邊距合并問(wèn)題 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-03
css 布局 之 兩端布局的實(shí)例代碼 (利用父級(jí)負(fù)的margin)
這篇文章主要介紹了css 布局 之 兩端布局 (利用父級(jí)負(fù)的margin)的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋2020-06-08









