對于日新月異的WEB開發技術和瀏覽器更新頻率來說,清除浮動已然是一個被人嚼碎了的話題。說是這些年過去了,有關float的地方,還依然少不了清除浮動的標簽和css代碼。W3C整天研究html5,就不能抽出點時間來把這種煩人的小細節修正一下嗎?抱怨歸抱怨,飯還得吃,錢還得掙,清除浮動就不能停止。
為了清除浮動增加無語義代碼已經是最穩定和簡單的方式,但總叫開發者心里感到不舒服,畢竟這么多年來早已習慣了結構和樣式的分離,非要在結構中插入這樣一行無語義代碼就會讓人覺得有種難以掌握的感受。
通過css代碼清除浮動也不省油,光是當前這種多個瀏覽器瓜分瀏覽器份額的狀況所帶來的各種css hack就夠讓人頭疼的了,而且這還沒說到那些個瀏覽器的不同版本之間又有多少的差別。通過css清除浮動還是一個長期的過程,因為你還要期盼下一牌瀏覽器沒有針對浮動修改對html代碼的解釋。
要說在當前這種惡劣的狀況下,選取哪種方式去清除浮動最為可取,這事一個人說了不算,要看大家的意見。
很多時候,開發人員在前端開發時遇到問題,就會去找那些運用了類似技術的大型網站,去分析它們的解決方案,然后用到自己的網站上,連為什么都省得去想了。我也常常這么做。具體到清除浮動這個問題上,我現在所用的無語義標簽法就是在看到某大型網站用過之后,我才選用的。
不過今天重提這個問題,是因為我又在一個大型網站上看到了不同的方案。它們是這樣做的:
| * html .clearfix{zoom: 1;} |
| *:first-child + html .clearfix{zoom: 1;} |
| <div class="clearfix" style="border: 2px solid red;"> |
| <div style="float: left; width: 80px; height: 80px; border: 1px solid blue;"> |
雖說這是來自大型網站,可信任度很高,可以不去思考而直接用,但學習的態度還是要有,就此分析一下其中的原理。
首先是利用:after偽類來兼容支持這一標準的瀏覽器們,FF、Chrome自然屬于強烈支持標準的瀏覽器行列,不過IE自從繁殖到第八代開始,也表示支持這一偽類。:after偽類用來和content屬性一起使用設置在對象后的內容。
因為現在IE6和IE7還很有勢力,所以,我們還得好好照顧它們。:after偽類IE不支持,它用來和content屬性一起使用設置在對象后的內容,例如:
| .clearfix:after {content:".";} |
這個CSS將會讓clearfix類標簽內的文本后邊加上英文句號。
"* html"這個選擇符只有IE6才能識別,因此在其中設置縮放屬性"zoom: 1;",便可實現兼容IE6;"*:first-child + html"這個選擇符只有IE7才能識別,因此設置縮放屬性"zoom: 1;" 便可實現兼容IE7。
原理分析完畢。方法是可行的,完美解決是不可能的。所以,W3標準中的浮動一天不變,清除浮動就會一天不止。