我以前整理的文章可能也不是特別深入。所以現在開始嘗試即使多花點時間收集整理,也不只發淺層知識,這樣對技術的深入理解是很有幫助的。
廢話不多說,我們現在開始。
說到css盒模型,這是大多面試基礎中會經常面到的。
首先我們要知道,什麼是盒模型?盒模型分為兩種:w3c盒模型和IE盒模型。
現在大多數瀏覽器預設情況下的盒模型就是w3c盒模型,由margin、border、padding、content、元素的width==content的width。也就是說w3c盒模型一般情況下會比設定的寬度要大,而IE盒模型則更為標準,元素的width==margin+border+padding+content。因此在w3c盒模型中加入了一個新的樣式box-sizing。這個樣式可以切換w3c盒模型和IE盒模型。我們來做個例子:
我們想設定一個如此的樣式,一個div內有5個div,橫向排列。div寬度可變,平分的。
<div class="box"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> </div>
因此,大多數情況下,可以使用%。內部的div可以使用float:left實現橫排。
.box{ background-color: yellowgreen; } .box div{ width: 16%; height: 50px; margin: 2%; float: left; background-color: yellow; text-align: center; line-height: 50px; border: 2px solid #000; }
如果直接使用這種方式會有幾個問題:
1.因為border的關係,最後一個div被排到了第二行,顯然是不對的。
2.外層的div高度變成0了,導致背景顏色無法展示。
我們來看看解決這2個問題。
第一個就是w3c盒模型的影響,可使用box-sizing: border-box;改變為IE盒模型。
box-sizing
有3種值:border-box、content-box、inherit
border-box可以轉IE盒模型,content-box是預設的w3c盒模型,inherit是父元素的box-sizing繼承下來的值
所以程式碼為:
.box div{ width: 16%; height: 50px; margin: 2%; float: left; background-color: yellow; text-align: center; line-height: 50px; border: 2px solid #000; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; }
.box{ background-color: yellowgreen; overflow: hidden; }
2.使用子元素clear:both;清除浮動。
<div class="box"> <div></div> <div></div> <div></div> <div></div> <div></div> <i class="clear"></i> </div>
.clear{ display: block; clear: both; }
為什麼用display:block呢?因為必須是塊級元素才能達到此效果。
這樣box下面才不會被影響。