CSS 外邊距合併
關於外邊距的基本用法可以參閱CSS margin外邊距一章節。
滿足指定條件,外邊距會出現合併現象。
通俗的講,外邊距合併就是相鄰的兩個或者多個外邊距只會產生一個外邊距的效果。
下面就通過程式碼例項來介紹一下出現外邊距合併現象的條件,和如何消除外邊距合併的影響。
一.外邊距產生的條件:
(1).水平方位不可能產生外邊距合併現象,垂直方位有可能出現。
(2).絕對定位(absolute/fixed)元素或者浮動元素不會出現外邊距合併。
(3).相鄰的外邊距之間內容為空,這裡的內容是指邊框和內邊距等。
二.程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div{ width:100px; height:100px; } .top{ background-color:green; margin-bottom:20px; } .bottom{ background-color:red; margin-top:10px; } </style> </head> <body> <div class="top"></div> <div class="bottom"></div> </body> </html>
上下兄弟元素的外邊距實現了合併效果,分析如下:
(1).首先兩個元素的外邊距是在垂直方位上。
(2).兩個元素都是非浮動或者非定位元素。
(3).兩個外邊距之間沒有邊框或者內邊距等內容。
外邊距合併最終值的原則是以大的外邊距為標準,小的會被忽略掉。
那麼上面程式碼兩個div的上下距離不是20+10而是20px。
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div{ width:100px; height:100px; } .top{ background-color:green; margin-bottom:-20px; } .bottom{ background-color:red; margin-top:30px; } </style> </head> <body> <div class="top"></div> <div class="bottom"></div> </body> </html>
上面程式碼中,垂直兄弟元素,有一方的負外邊距是負數。
那麼最終生效的負外邊距的值是兩個外邊距的和-20+30=10。
再來看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div{ width:100px; height:100px; } .top{ background-color:green; margin-bottom:-20px; } .bottom{ background-color:red; margin-top:-10px; position:relative; left:30px; } </style> </head> <body> <div class="top"></div> <div class="bottom"></div> </body> </html>
前一個程式碼中,相鄰的外邊距是一正一負,那麼合併計算方式是兩者相加。
上面的程式碼,相鄰外邊距都是負數,那麼以較小(絕對值大)的外邊距為標準。
那麼就以-20px為準,下面的div元素會向上與上面的div元素重合20px。
上面都是上下兄弟元素的外邊距合併,其實父子元素也能夠實現外邊距合併效果。
父子元素外邊距合併:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> #box{ width:200px; height:200px; background-color:red; } #ant{ width:60px; height:60px; background-color:green; margin:0px auto; margin-top:50px; } </style> </head> <body> <div id="box"> <div id="ant"></div> </div> </body> </html>
上面程式碼中,我們的本意是想讓子元素距離父元素的頂部50px。
然而沒想到的是,子元素和父元素緊貼在一起,而父元素的頂部卻距離它的父元素50px。
就好像是子元素的外邊距一層層的傳匯出去,這就是父子外邊距合併現象,外邊距不會作用與父元素,而是作用於父元素之外的元素。但是這個外邊距合併現象還需要附加一個條件,就是不能觸發父元素的BFC格式化上下文。
關於BFC格式化上下文可以參閱CSS BFC塊級格式化上下文一章節。
上面的父子外邊距和並現象通常是不希望出現的,只要反其道而行之即可,啟用BFC。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> #box{ width:200px; height:200px; background-color:red; overflow: hidden; } #ant{ width:60px; height:60px; background-color:green; margin:0px auto; margin-top:50px; } </style> </head> <body> <div id="box"> <div id="ant"></div> </div> </body> </html>
只要給父元素新增overflow: hidden;即可啟用BFC,那麼父子元素的外邊距合併現象消失。
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> .box { border:1px solid red; width:200px; } .middle { background-color:green; } </style> </head> <body> <div class="box"> <div class="middle" style="margin-top:40px;"> <div style="margin-top:-40px;"> <div style="margin-top:130px;">螞蟻部落</div> </div> </div> </div> </body> </html>
前面所有的外邊距合併都是兩個外邊距之間進行的。
上述程式碼是三個外邊距合併,當然也可以是更多個外邊距合併。
已經介紹過,兩個一正一負外邊距合併,那麼只要簡單計算兩者的和即可。
如果多個正負混雜的外邊距合併,只要找出負值中最小(絕對值最大)的,正值最大的求和。
那麼上面的最終外邊距是-40+130=90。
理論最後驗證:
只要滿足外邊距合併的條件,那麼就可以出現外邊距合併現象。
看如下程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> .box { border:1px solid red; width:200px; } .ant { margin-bottom:50px; margin-top:50px; } </style> </head> <body> <div class="box"> <div class="ant"></div> </div> </body> </html>
如果沒有外邊距合併現象,那麼父元素的高度將會是100px。
但是子元素的上下外邊距出現了合併,最奇怪的是同一個元素的上下外邊距合併。
因為這一切符合外邊距合併的理論:
(1).外邊距在垂直方位。
(2).因為沒有高度,所以元素沒有內容,兩個外邊距之間為空。
相關文章
- CSS 負外邊距CSS
- CSS margin 外邊距CSS
- CSS margin外邊距CSS
- CSS margin負外邊距CSS
- CSS 右外邊距失效CSS
- 浮動定位(BFC、邊距合併)
- CSS padding 內邊距CSSpadding
- CSS padding內邊距CSSpadding
- CSS 右內邊距失效CSS
- CSS 盒子的邊距塌陷CSS
- 外邊距與絕對定位
- 12.9學習日報(盒子模型和各類注意事項、margin垂直外邊距合併、頂部塌陷問題)模型
- 面試之CSS篇 - 邊距重疊與BFC面試CSS
- table 設定合併邊框
- 左右邊距可控
- 盒子模型的外邊距塌陷和合並問題及解決方案模型
- echarts grid屬性控制邊距Echarts
- 003-css外觀屬性(color、行間距、水平居中、首行縮排、字間距、文字陰影)CSS
- CSS控制字的間距CSS
- 邊學邊玩CSS GridCSS
- scss自動生成margin padding邊距CSSpadding
- css實現四種常見邊框內外角組合CSS
- Css之 間距初始化CSS
- Hbase-原理-region合併和hfile的合併(大合併、小合併)
- iOS tableView 分割線左右邊距調整iOSView
- img圖片設定padding內邊距padding
- 用padding和margin撐起左右邊距padding
- 如何縮小Matplotlib圖中的邊距
- CSS border邊框CSS
- PHP引入合併多個JS和CSS檔案例項PHPJSCSS
- vue-split-table【表格合併和編輯外掛】Vue
- Python修改柱狀圖邊緣柱子與圖邊界的距離Python
- win10系統怎麼設定word頁邊距_win10設定word頁邊距的步驟Win10
- CSS 邊框陰影立體邊框CSS
- jQuery和css3側邊欄滑出式圖片介紹外掛jQueryCSSS3
- Hummingbird - WordPress快取、靜態資源合併、加速外掛快取
- PHP 圖片的合併,微信小程式碼合併,文字合併PHP微信小程式
- css之左邊定寬右邊自適應CSS