float 是 css 的定位屬性。在傳統的印刷布局中,文本可以按照需要圍繞圖檔。一般把這種方式稱為“文 本環繞”。在網頁設計中,應用了CSS的float屬性的頁面元素就像在印刷布局裡面的被文字包圍的圖檔一樣。浮動的元素仍然是網頁流的一部分。這與使用 絕對 定位的頁面元素相比是一個明顯的不同。絕對定位的頁面元素被從網頁流裡面移除了,就像印刷布局裡面的文本框被設定為無視頁面環繞一樣。絕對定位的元素不會 影響其它元素,其它元素也不會影響它,無論它是否和其它元素挨着。
像這樣在一個元素上用CSS設定浮動:
fload屬性有四個可用的值:Left 和Right 分别浮動元素到各自的方向,None (預設的) 使元素不浮動,Inherit 将會從父級元素擷取float值。
除了簡單的在圖檔周圍包圍文字,浮動可用于建立全部網頁布局。
Float對小型的布局同樣有用。例如頁面中的這個小區域。如果我們在我們的小頭像圖檔上使用Float,當調整圖檔大小的時候,盒子裡面的文字也将自動調整位置:
同樣的布局可以通過在外容器使用相對定位,然後在頭像上使用絕對定位來實作。這種方式中,文本不會受頭像圖檔大小的影響,不會随頭像圖檔的大小而有相應變化。
清除(clear)是浮動(float)的相關屬性.一個設定了清除Float的元素不會如浮動所設定的一樣,向上移動到Float元素的邊界,而是會忽視浮動向下移動。如下,一圖頂千言。
上例中,側欄向右浮動,并且短于主内容區域。頁腳(footer)于是按浮動所要求的向上跳到了可能的空間。要解決這個問題,可以在頁腳(footer)上清除浮動,以使頁腳(footer)待在浮動元素的下面。
清除(clear)也有4個可能值。最常用的是 both,清楚左右兩邊的浮動。left 和 right 隻能清楚一個方向的浮動。none 是預設值,隻在需要移除已指定的清除值時用到。inherit 應該時第五個值,不過很奇怪的是 IE 不支援(這個不奇怪吧,IE 從來都這麼特立獨行吧 -糖伴蕃茄注)。隻清除左邊或右邊的浮動,實際中很少見,不過絕對有他們的用處。
使用浮動(float)的一個比較疑惑的事情是他們怎麼影響包含他們的父元素的。如果父元素隻包含浮動元素,那麼它的高度就會塌縮為零。如果父元素不包含任何的可見背景,這個問題會很難被注意到,但是這是一個很重要的問題。
塌陷的直覺對立面更不好,看看下面的情況:
當上面的塊級元素自動擴充以适應浮動元素時,段落間的文本流中會出現非自然的空白換行,而且沒有有效的方法來修正這個問題。對于這種情況,設計師的抱怨會更甚于對塌陷的抱怨(沒了解,不是設計完成之後才會進行頁面編碼嗎?- 糖伴蕃茄)。
為了防止怪異的布局和跨浏覽器的問題,塌陷問題幾乎總是被要處理的。我們在容器中的浮動元素之後,容器結束之前來清除浮動。
如果你很明确的知道接下來的元素會是什麼,可以使用 clear:both; 來清除浮動。這個方法很不錯,它不需要 hack,不添加額外的元素也使得它有良好的語義性。當然事情并不是都可以這樣解決的,工具箱中還是需要另外幾個清除浮動的工具。
空div方法從字面來看,是一個空的 div。
。有時可能會用
或者一些其他元素,但是 div 是最常用的,因為它沒有浏覽器預設樣式;沒有特殊功能,而且一般不會被 css 樣式化。這個方法因為隻是為了表現,對頁面沒有上下文涵義而被純語義論者嘲笑。誠然,從嚴格的角度來說他們是對的,但是這個方法有效而且沒有任何傷害。
overflow 方法在父元素上設定 overflow 這個 css 屬性。如果父元素的這個屬性設定為 auto 或者 hidden,父元素就會擴充以包含浮動。這個方法有着較好的語義性,因為他不需要額外元素。但是,如果需要增加一個新的 div 來使用這個方法,其實就和空 div 方法一樣沒有語義了。而且要記住,overflow 屬性不是為了清除浮動而定義的。要小心不要覆寫住内容或者觸發了不需要的滾動條。
簡單清除方法使用了一個聰明的 css 僞選擇符(:after)來清除浮動。比起在父元素上設定 overflow,隻需要給它增加一個額外的類似于”clearfix”的類。這個類使用如下 css:
不同的情況需要不同的浮動清除方法。以一個具有不同樣式塊的網格為例。
為了從視覺上較好的把相似的塊聯系起來,需要在必要的地方開啟新行,這裡是顔色改變的地方。如果每個顔色組都有一個父元素的話,我們可以使用 overflow 或者 簡單清除方法。或者,在每組之間用一個空div方法。額外的 div 之前并不存在,可以自己試試來看看哪個方法好。
浮動因脆弱而飽受诟病。大多數的脆弱性來自于 IE6 及其一系列的浮動相關 bug。因為越來越多的設計師不再支援 IE6 了,你也可以不關注它了。不過對于那些要關注的人來說,這裡有些大概。
推倒是浮動元素内的元素(大多是圖檔)比浮動元素本身寬造成的現象。大多數的浏覽器會在浮動之外渲染圖檔,但是不會有伸出來的部分影響其他布局。IE 會擴充浮動來包含圖檔,精彩大幅度地影響布局。一個普遍的例子是突破伸出主内容之外把側欄推到下面。
快速修正:確定不是圖檔造成這種情況,使用 overflow:hidden 來切除多餘的部分。
3像素間距是指挨着浮動元素的文本會神奇的被踢出去3像素,好像浮動元素的周圍有一個奇怪的力場一樣。快速修正:在受影響的文本上設定寬度或高度。
IE7 中,底邊距 bug是當浮動父元素有浮動子元素時,這些子元素的底邊距會被父元素忽略掉。快速修正:用父元素的底内補白(padding)代替。
本文轉自 風雨蕭條 51CTO部落格,原文連結:http://blog.51cto.com/1095221645/1744993,如需轉載請自行聯系原作者