首先上圖,這兩張很明顯可以看出IE盒模型和標准盒模型之間的差別。


當然今天不是去細細追究兩種模型具體是怎么去計算布局的,那個很多文章已經已經有過了,不再重復。以前剛開始學習盒模型的時候,就學到的是IE的盒模型不規范,不符合標准的盒模型,要加文檔申明把IE的轉換為標准的。要給文檔頭部加上 DOCTYPE 聲明。讓所有瀏覽器中都可以顯示“標准 W3C 盒子模型”。為了讓網頁能兼容各個瀏覽器。殊不知,真正開發的時候其實IE模型更利於實際開發。
來說說為什么要將標准盒模型轉換為IE盒模型
為什么IE盒模型更容易開發?先來解決這個問題。從上面兩張圖片對比可以看出來,標准的盒模型padding,border是不算在寬度之內的,所以當你比如要在一個容器里並排顯示兩個同樣的盒子。你用標准模型時肯定會這樣設置每個盒子width:50%.但是當你查看時會發現兩個盒子緊緊挨在一起實在是不美觀,所以你又設置padding:0 5%;然而這時候兩個盒子寬度又超過了大容器的總寬度,所以你又得去調整盒子的width:40% 這樣確實可以解決問題,可是這樣你不覺得很不方便嗎。。好了這時候就可以看出IE盒模型的好處了。就將兩個盒子的寬度設置為50%,這時候就算你再怎么去調整padding都會在兩個盒子的內部去調整,不會再影響布局。簡直方便到不要不要的~~
那么怎樣將標准盒模型轉化為IE盒模型呢
在css3中有這樣一個屬性:
官方給的解釋是:box-sizing 屬性允許您以特定的方式定義匹配某個區域的特定元素。
再來看看box-sizing屬性給出的幾個值

content-box:這是由css2.1規定的寬度高度行為。什么是按css2.1的行為?意思就是說設置這個值之后,就會按以前規定的標准來顯示,也就是按照標准的盒模型顯示。之所以有這個屬性以及這個值,可以看出w3c也意識到了自己規定的標准盒模型簡直就是個坑。。
border-box:好了,前面絮絮叨叨這么多,就是為了引出這么個東西。通過從已設定的寬度和高度分別減去邊框和內邊距才能得到內容的寬度和高度。所以w3c終於承認了人家IE盒模型的合理性。通過設置 box-sizing的值為border-box來模擬這一規范。
盒模型這塊看似很簡單的問題,如果沒搞的很清楚,也會造成很大的困擾,對開發進度產生影響。
