做爲前端人員,盒模型是最基礎的知識點,在排版與佈局時不可避免與盒模型打交道。前端
在咱們編寫HTML時,網頁上的內容幾乎都是被包在一個個元素(固然也能夠叫作標籤)中的,最多見的有div、span、a、img等等。雖然標籤的個數不少樣,可是總的來講能夠把元素分爲三種web
在具體講總結盒模型前,先簡單的介紹一下這幾種元素各自的特性。瀏覽器
在CSS中咱們常常聽到的一個詞叫作「文檔流」,那麼到底什麼是文檔流呢?「流」實際上就是CSS中的一種基本的定位和佈局機制。上述所說的三種元素固然要遵照必定的佈局機制啦,具體來講:wordpress
塊狀元素: 典型表明div佈局
行內元素: 典型表明spanspa
當對一個文檔進行佈局的時候,瀏覽器渲染引擎會根據CSS-Box模型將全部元素表示爲一個矩形盒子,在CSS中會經過盒模型去描述這些矩形盒子————元素所佔空間的內容。rem
那麼盒子裏到底有什麼呢,以下圖所示:文檔
對於一個盒子來講它由四個部分組成:其中margin叫作外邊距,border叫作邊框,padding叫作內邊距,content叫作內容區域get
細分一點,margin它能夠分爲margin-left,margin-right,margin-top和margin-bottom。同理border和padding也有這樣的屬性。it
盒子出來了,天然要計算它的大小,可是可是,又有幺蛾子了,在計算大小的時候有兩套不一樣的標準,
也就是有兩種盒模型:
天然不一樣的盒子模型會有不一樣的計算方式
在W3C標準模式下:一個盒子的空間佔有寬度=content width + padding + border + margin
在IE怪異盒模型:一個盒子的空間佔有寬度=width(padding和border被包含在內了) + margin
高度能夠同理計算
因爲存在以上的計算方法:
在CSS的標準盒模型中,width和height指的是內容區域的寬度和高度。
增長內邊距、邊框和外邊距不會影響內容區域的尺寸,可是會增長整個盒子的大小。這個特色其實有的時候有點討厭的————咱們能夠經過設置box-sizing(CSS3新增屬性)來改變盒子被撐大。
那麼box-sizing究竟是什麼呢?在MDN中有這樣的解釋說明:
該屬性用於更改用於計算元素寬度和高度的默認的 CSS 盒子模型。可使用此屬性來模擬不正確支持CSS盒子模型規範的瀏覽器的行爲。
在標準盒模型中,你設置一個元素的 width 與 height 只會應用到這個元素的內容區。若是這個元素有border或padding,當咱們在調整一個元素的寬度或高度時須要時刻注意這個元素的邊框和內邊距,也就上面講的會被撐大。當咱們在實現響應式佈局時候,這個特色尤其煩人。
box-sizing屬性的默認值爲content-box,也就是標準盒模型。
box-sizing另一個屬性值border-box指的就是IE盒模型。
瞭解盒模型的計算方式是很是重要的,如今的網頁,尤爲是移動端的頁面,須要適應於不一樣的屏幕大小~~~
此外,若是在ie6,7,8中DOCTYPE缺失也會觸發IE模式。
參考文獻: