盒子模型眾所周知,這里先簡單介紹一下。
可以看到,在標准盒模型下,width和height是內容區域即content的width和height。而盒子總寬度為
在標准模式下,一個塊的總寬度= width + margin(左右) + padding(左右) + border(左右)
而IE盒模型或怪異盒模型顯而易見的區別就是,width和height除了content區域外,還包含padding和border。盒子的總寬度為
一個塊的總寬度= width + margin(左右)(即width已經包含了padding和border值)
當然這些大伙應該都知道,關鍵的是如何運用和選擇哪種盒模型。
首先,如何運用?
只要在文檔首部加了doctype申明,即使用了標准盒模型,而不加,則會由瀏覽器自己決定,比如,ie 瀏覽器中顯示“ie盒子模型”,在 ff 瀏覽器中顯示“標准 w3c 盒子模型”。
然后,選擇哪種?
按理說,我們應該遵循w3c標准使用標准盒模型,但我發現很多ui框架使用的都是怪異盒模型,比如ionic,vux,和bootstrap,為什么呢?我思考了很長時間。
不知道大家有沒有遇到過這種情況,本來我畫了兩個div,他們在flex布局下分別占50%的寬度,很簡單,我們width設置為50%即可,當我們畫完了,很滿意的看了看頁。
代碼:
* {
margin: 0;
padding: 0;
box-sizing: content-box;
}
<div style="display: flex;">
<div style="width: 50%;background-color: blue;color: white;">我是左邊</div>
<div style="width: 50%;background-color: red;color: white">我是右邊</div>
</div>
效果:
這時候,一個需求來了,左邊的部分要加上邊框,你一想,這不簡單么,立馬給左邊加上了一個邊框。但,意外出現了,左邊和右邊的不相等了。因為左邊加上了邊框,所以寬度溢出了,這時候右邊就會壓縮自己,這樣就導致兩邊不一致了
代碼:
<div style="display: flex;box-sizing: content-box">
<div style="width: 50%;background-color: blue;color: white;border: 5px solid black">我是左邊</div>
<div style="width: 50%;background-color: red;color: white">我是右邊</div>
</div>
效果:
啊,崩潰,又得調半天,關鍵還不好調。因為border必須為數值,而其他的為百分比,這樣就很難知道左右該設多少比例,才能讓左右兩邊完全一致了。
而用怪異盒模型,這樣的問題就迎刃而解。
代碼:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
<div style="display: flex;">
<div style="width: 50%;background-color: blue;color: white;border: 5px solid black">我是左邊</div>
<div style="width: 50%;background-color: red;color: white">我是右邊</div>
</div>
這樣不管你邊框是多寬,左右都是始終相等的。
然后,再請大家想一想,移動端都是需要自適應布局的,需要用到大量的百分數,這時候再用標准盒模型,邊框進來插一腳無疑會讓情況變得很復雜,對自適應布局很不友好,這大概就是很多框架都采用怪異盒子模型的原因吧。
以上純屬個人觀點,不對的地方,請大家指教。