CSS深入學(xué)習(xí)之讓你認(rèn)識不一樣的margin

一、簡介
margin我們一般習(xí)慣的叫它外邊距,分別可以設(shè)置四個方向的外邊距,這里不再贅述賦值語法。
實際上,我們通常設(shè)置的margin是物理級別的設(shè)置,而margin還有start、end、before、after等,這些主要是邏輯級別的設(shè)置,如果你感興趣的話,自行Google吧。
在設(shè)置margin時,我們必須要知道:
二、盒子模型
說到margin,不得不說一下盒子模型:
1、從內(nèi)之外content => padding => border => margin
盒子模型之所以要終點理解,主要是盒子模型的標(biāo)準(zhǔn)不一樣,也就決定我們在CSS中設(shè)置的width到底是什么,這時大家多會想起那幾個計算公式,實際上CSS3的到來,我們可以通過box-sizing來設(shè)置盒子模型的標(biāo)準(zhǔn):
2、border-box: width從border開始計算;
3、content-box: width從content開始計算;
4、padding-box: 已經(jīng)從標(biāo)準(zhǔn)中去除。
再來一張圖,是不是已經(jīng)了然于胸了
三、margin重疊問題
這種問題主要發(fā)生在block元素上并且不是浮動元素(這里并沒有描述清楚,在后面會詳細講),下面我們來看發(fā)生的情況。
1、發(fā)生在相鄰的兄弟元素
.a { margin: 50px 0; } .b { margin: 100px 0; }
相鄰的兄弟元素發(fā)生的margin重疊
這種情況發(fā)生margin重疊,相鄰兄弟節(jié)點之間的距離為最大margin值,避免這種情況的最佳方式,在垂直方向上,只設(shè)置margin-top或者margin-bottom。
2、發(fā)生在父子節(jié)點
div(class="b") div(class="a") div(class="c") C
.a { margin: 20px 0; } .b { margin: 100px 0; }
父子節(jié)點發(fā)生margin重疊
這里按照我們的理解應(yīng)該是a距離b是20像素,c距離a是100像素。但是事實卻不是這樣,這里我們可以通過以下方法解決重疊的問題:
- 父元素設(shè)置border;
- 父元素設(shè)置padding;
- 父元素設(shè)置overflow為hidden或者scroll,其他的不適用;
- 父元素設(shè)置position為fixed或者absolute,其他的不適用。
四、神奇的margin負(fù)值
我們給一個block元素設(shè)置四個方向上的margin會發(fā)生什么:
- top和left設(shè)置負(fù)值,會將元素向上或者左移動對應(yīng)的像素距離;
- bottom和right設(shè)置負(fù)值,則會將相鄰的元素向上或者左移動。
這里還有一點,查資料的時候,發(fā)現(xiàn)很多人多說margin負(fù)值可以改變元素的寬度,這里我想更正一下,這并不是margin負(fù)值的特性,而是margin的特性,比如下面這段CSS,完全可以設(shè)置塊級元素的寬度。
.item { margin: 0 200px; height: 200px; }
對于margin賦值在布局的應(yīng)用很廣泛,比如我們已知一個元素的寬高,你可以通過margin負(fù)值居中。
.item { position: absolute; background: red; width: 200px; height: 200px; top: 50%; left: 50%; margin-top: -100px; margin-left: -100px; }
五、margin與float
對于這兩個讓人頭疼的屬性混到一起,我只想說,真的很爆炸。上面我說過“這種問題主要發(fā)生在block元素上并且不是浮動元素”,這里要再補充兩點:
- 相鄰兄弟元素,如果兩者多是浮動元素,則不發(fā)生margin重疊;
- 父子元素,如果其中一個是浮動元素,則不會發(fā)生margin重疊;
主要還是由于浮動元素不在正常的文檔流中,所以還是用上清除浮動的方法比較好。(一下為bootstrap的實現(xiàn)方式)
.clearfix::before, .clearfix::after { content: " "; display: table; } .clearfix::after { clear: both; }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
- 本文主要介紹了CSS中margin邊界疊加問題及解決方案。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-27
- 下面小編就為大家?guī)硪黄狢SS margin全面了解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,祝大家游戲愉快哦2016-07-21
- 下面小編就為大家?guī)硪黄獪\談css margin重疊。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-19
- 下面小編就為大家?guī)硪黄狢SS 之margin知識點(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-10
css布局之負(fù)margin妙用及其他實現(xiàn)
這篇文章主要為大家詳細介紹了css布局之負(fù)margin妙用及其他實現(xiàn)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07- 這篇文章和大家詳細說一說CSS中margin屬性的使用,重點描述了關(guān)于margin,我們?nèi)粘2惶菀装l(fā)現(xiàn)的“坑,感興趣的小伙伴們可以參考一下2016-02-25
- 這篇文章主要介紹了CSS中的margin屬性的使用,margin是元素盒模型(box model)的基礎(chǔ)屬性,常被用來設(shè)置外邊距,實際用途非常廣泛,需要的朋友可以參考下2016-02-02
CSS中使用負(fù)margin值來調(diào)整居中位置
這篇文章主要介紹了CSS中使用負(fù)margin值來調(diào)整居中位置的方法,文中同時提到了這種常用方法的一些值得注意的地方,需要的朋友可以參考下2015-07-15- margin 簡寫屬性在一個聲明中設(shè)置所有外邊距屬性。該屬性可以有 1 到 4 個值。這個簡寫屬性設(shè)置一個元素所有外邊距的寬度,或者設(shè)置各邊上外邊距的寬度。塊級元素的垂直相2014-10-22
通過css屬性margin:auto讓Div中的Table居中
在div標(biāo)簽中加入text-align:center里面的Table是不會居中的,在Table中加上 margin:auto就可以實現(xiàn)居中效果,下面有個示例,大家可以參考下2014-03-19