浮動的框能夠向左或向右移動,直到它的外邊緣碰到包含框或另外一個浮動框的邊框爲止。 css
因爲浮動框不在文檔的普通流中,因此文檔的普通流中的塊框表現得就像浮動框不存在同樣。 工具
請看下圖,當把框 1 向右浮動時,它脫離文檔流而且向右移動,直到它的右邊緣碰到包含框的右邊緣: 佈局
再請看下圖,當框 1 向左浮動時,它脫離文檔流而且向左移動,直到它的左邊緣碰到包含框的左邊緣。由於它再也不處於文檔流中,因此它不佔據空間,實際上覆蓋住了框 2,使框 2 從視圖中消失。 spa
若是把全部三個框都向左移動,那麼框 1 向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。 code
以下圖所示,若是包含框太窄,沒法容納水平排列的三個浮動元素,那麼其它浮動塊向下移動,直到有足夠的空間。若是浮動元素的高度不一樣,那麼當它們向下移動時可能被其它浮動元素「卡住」: 圖片
浮動框旁邊的行框被縮短,從而給浮動框留出空間,行框圍繞浮動框。 class
所以,建立浮動框可使文本圍繞圖像: 容器
要想阻止行框圍繞浮動框,須要對該框應用 clear 屬性。clear 屬性的值能夠是 left、right、both 或 none,它表示框的哪些邊不該該挨着浮動框。
爲了實現這種效果,在被清理的元素的上外邊距上添加足夠的空間,使元素的頂邊緣垂直降低到浮動框下面:
這是一個有用的工具,它讓周圍的元素爲浮動元素留出空間。
讓咱們更詳細地看看浮動和清理。假設但願讓一個圖片浮動到文本塊的左邊,而且但願這幅圖片和文本包含在另外一個具備背景顏色和邊框的元素中。您可能編寫下面的代碼:
.news { background-color: gray; border: solid 1px black; } .news img { float: left; } .news p { float: right; } <div class="news"> <img src="news-pic.jpg" /> <p>some text</p> </div>
這種狀況下,出現了一個問題。由於浮動元素脫離了文檔流,因此包圍圖片和文本的 div 不佔據空間。
如何讓包圍元素在視覺上包圍浮動元素呢?須要在這個元素中的某個地方應用 clear:
不幸的是出現了一個新的問題,因爲沒有現有的元素能夠應用清理,因此咱們只能添加一個空元素而且清理它。
.news { background-color: gray; border: solid 1px black; } .news img { float: left; } .news p { float: right; }.clear { clear: both; }<div class="news"> <img src="news-pic.jpg" /> <p>some text</p><div class="clear"></div></div>
這樣能夠實現咱們但願的效果,可是須要添加多餘的代碼。經常有元素能夠應用 clear,可是有時候不得不爲了進行佈局而添加無心義的標記。
不過咱們還有另外一種辦法,那就是對容器 div 進行浮動:
.news { background-color: gray; border: solid 1px black;float: left;} .news img { float: left; } .news p { float: right; } <div class="news"> <img src="news-pic.jpg" /> <p>some text</p> </div>
這樣會獲得咱們但願的效果。不幸的是,下一個元素會受到這個浮動元素的影響。爲了解決這個問題,有些人選擇對佈局中的全部東西進行浮動,而後使用適當的有意義的元素(經常是站點的頁腳)對這些浮動進行清理。這有助於減小或消除沒必要要的標記。