如何理解 CSS 中的浮動布局方式?最主要的功能是什麼?如何正確地使用它?
順便說一下clear的作用。
浮動從何而來?
我們為何要清除浮動?清除浮動的原理是什麼?下面將一步一步地深入剖析其中的奧秘,讓浮動使用起來更加得心應手。 一、清除浮動 還是 閉合浮動 (Enclosing float or Clearing float)? 很多人都已經習慣稱之為清除浮動,以前我也一直這麼叫著,但是確切地來說是不準確的。我們應該用嚴謹的態度來對待代碼,也能更好地幫助我們理解開頭的三個問題。1)清除浮動:清除對應的單詞是 clear,對應CSS中的屬性是 clear:left | right | both | none;2)閉合浮動:更確切的含義是使浮動元素閉合,從而減少浮動帶來的影響。兩者的區別 請看優雅的 Demohttp://www.iyunlu.com/demo/enclosing-float-and-clearing-float/index.html通過以上實例發現,其實我們想要達到的效果更確切地說是閉合浮動,而不是單純的清除浮動,在footer上設置clear:both清除浮動並不能解決warp高度塌陷的問題。結論:用閉合浮動比清除浮動更加嚴謹,所以後文中統一稱之為:閉合浮動。
二、為何要清除浮動? 要解答這個問題,我們得先說說CSS中的定位機制:普通流,浮動,絕對定位 (其中"position:fixed" 是 "position:absolute" 的一個子類)。1)普通流:很多人或者文章稱之為文檔流或者普通文檔流,其實標準里根本就沒有這個詞。如果把文檔流直譯為英文就是 document flow ,但標準里只有另一個詞,叫做普通流 http://www.w3.org/TR/CSS2/visuren.html#normal-flow(normal flow),或者稱之為常規流。但似乎大家更習慣文檔流的稱呼,因為很多中文翻譯的書就是這麼來的。比如《CSS Mastery》,英文原書中至始至終都只有普通流 normal flow(普通流) 這一詞,從來沒出現過document flow (文檔流)2)浮動:浮動的框可以左右移動,直至它的外邊緣遇到包含框或者另一個浮動框的邊緣。浮動框不屬於文檔中的普通流,當一個元素浮動之後,不會影響到 塊級框的布局而只會影響內聯框(通常是文本)的排列,文檔中的普通流就會表現得和浮動框不存在一樣,當浮動框高度超出包含框的時候,也就會出現包含框不會 自動伸高來閉合浮動元素(「高度塌陷」現象)。顧名思義,就是漂浮於普通流之上,像浮雲一樣,但是只能左右浮動。正是因為浮動的這種特性,導致本屬於普通流中的元素浮動之後,包含框內部由於不存在其他普通流元素了,也就表現出高度為0(高度塌陷)。在實際布局中,往往這並不是我們所希望的,所以需要閉合浮動元素,使其包含框表現出正常的高度。絕對定位就不多說了,不在本文討論範圍之內,下回分解。三、清除浮動的原理——了解 hasLayout 和 Block formatting contexts 先看一下清理浮動的各種方法:1)添加額外標籤這是在學校老師就告訴我們的 一種方法,通過在浮動元素末尾添加一個空的標籤例如 &&