css浮動(dòng)

CSS浮動(dòng)

首先div是塊級(jí)元素,在頁(yè)面中獨(dú)占一行,自? 上而下排列。


????????? 以上可以看出,即使div1de寬度很小,頁(yè)面中一行可以容下div1 和div2, div2頁(yè)不會(huì)排在div1后邊,因?yàn)閐iv1元素是獨(dú)占一行的。

?? 注意,以上這些理論,是指標(biāo)準(zhǔn)中的div。無(wú)論多么復(fù)雜的布局,其基本出發(fā)的均是:“如何在一行顯示多個(gè)div元素”。

顯然標(biāo)準(zhǔn)div流已經(jīng)無(wú)法滿足需求,這就要用到浮動(dòng)了,浮動(dòng)可以理解為讓莫個(gè)div元素脫離標(biāo)準(zhǔn)流,漂浮在標(biāo)準(zhǔn)流之上,和標(biāo)準(zhǔn)流不是一個(gè)層次。

列如:

假設(shè)上圖中的div2浮動(dòng),那么它將脫離標(biāo)準(zhǔn)流,但div1,div2,div3,仍然在標(biāo)準(zhǔn)當(dāng)中,所以div3會(huì)自動(dòng)向上移動(dòng),占據(jù)div2de位置,重新組成一個(gè)流。


從圖中可以看出,由于對(duì)div2設(shè)置浮動(dòng),因此它不再屬于標(biāo)準(zhǔn)流,div3自動(dòng)上移頂替div2的位置,div1、div3、div4依次排列,成為一個(gè)新的流。又因?yàn)楦?dòng)是漂浮在標(biāo)準(zhǔn)流之上的,因此div2擋住了一部分div3,div3看起來(lái)變“矮”了。

這里div2用的是左浮動(dòng)(float:left;),可以理解為漂浮起來(lái)后靠左排列,右浮動(dòng)(float:right;)當(dāng)然就是靠右排列。這里的靠左、靠右是說(shuō)頁(yè)面的左、右邊緣。

如果我們把div2采用右浮動(dòng),會(huì)是如下效果:

此時(shí)div2靠頁(yè)面右邊緣排列,不再遮擋div3,讀者可以清晰的看到上面所講的div1、div3、div4組成的流。

目前為止我們只浮動(dòng)了一個(gè)div元素(div2),如果浮動(dòng)多個(gè)div呢?

下面我們把div2和div3都加上左浮動(dòng),效果如圖:


同理,由于div2、div3浮動(dòng),它們不再屬于標(biāo)準(zhǔn)流,因此div4會(huì)自動(dòng)上移,與div1組成一個(gè)“新”標(biāo)準(zhǔn)流,而浮動(dòng)是漂浮在標(biāo)準(zhǔn)流之上,因此div2又擋住了div4。

當(dāng)同時(shí)對(duì)div2、div3設(shè)置浮動(dòng)之后,div3會(huì)跟隨在div2之后,不知道讀者有沒(méi)有發(fā)現(xiàn),一直到現(xiàn)在,div2在每個(gè)例子中都是浮動(dòng)的,但并沒(méi)有跟隨到div1之后。因此,我們可以得出一個(gè)重要結(jié)論:

假如某個(gè)div元素A是浮動(dòng)的,如果A元素上一個(gè)元素也是浮動(dòng)的,那么A元素會(huì)跟隨在上一個(gè)元素的邊(如果一行放不下這兩個(gè)元素,那么A元素會(huì)被擠到下一行);如果A元素上一個(gè)元素是標(biāo)準(zhǔn)流中的元素,那么A的相對(duì)垂直位置不會(huì)改變,也就是說(shuō)A的頂部總是和上一個(gè)元素的底部對(duì)齊。

為了幫助讀者理解,再舉幾個(gè)例子。

假如我們把div2、div3、div4都設(shè)置成浮動(dòng),效果如下:


根據(jù)上邊的結(jié)論:先從div4開(kāi)始分析,它發(fā)現(xiàn)上邊的元素div3是浮動(dòng)的,所以div4會(huì)跟隨在div3之后;div3發(fā)現(xiàn)上邊的元素div2也是浮動(dòng)的,所以div3會(huì)跟隨在div2之后;而div2發(fā)現(xiàn)上邊的元素div1是標(biāo)準(zhǔn)流中的元素,因此div2的相對(duì)垂直位置不變,頂部仍然和div1元素的底部對(duì)齊。由于是左浮動(dòng),左邊靠近頁(yè)面邊緣,所以左邊是前,因此div2在最左邊。

假如把div2、div3、div4都設(shè)置成浮動(dòng),效果如下:

道理和左浮動(dòng)基本一樣,只不過(guò)需要注意一下前后對(duì)應(yīng)關(guān)系。由于是右浮動(dòng),因此右邊靠近頁(yè)面邊緣,所以右邊是前,因此div2在最右邊。

假如我們只把div2、div4左浮動(dòng),效果圖如下:

依然是根據(jù)結(jié)論,div2、div4浮動(dòng),脫離了標(biāo)準(zhǔn)流,因此div3將會(huì)自動(dòng)上移,與div1組成標(biāo)準(zhǔn)流。div2發(fā)現(xiàn)上一個(gè)元素div1是標(biāo)準(zhǔn)流中的元素,因此div2相對(duì)垂直位置不變,與div1底部對(duì)齊。div4發(fā)現(xiàn)上一個(gè)元素div3是標(biāo)準(zhǔn)流中的元素,因此div4的頂部和div3的底部對(duì)齊,并且總是成立的,因?yàn)閺膱D中可以看出,div3上移后,div4也跟著上移,div4總是保證自己的頂部和上一個(gè)元素div3(標(biāo)準(zhǔn)流中的元素)的底部對(duì)齊。

至此,恭喜讀者已經(jīng)掌握了添加浮動(dòng),但還有清除浮動(dòng),有上邊的基礎(chǔ)清除浮動(dòng)非常容易理解。

經(jīng)過(guò)上邊的學(xué)習(xí),可以看出:元素浮動(dòng)之前,也就是在標(biāo)準(zhǔn)流中,是豎向排列的,而浮動(dòng)之后可以理解為橫向排列。

清除浮動(dòng)可以理解為打破橫向排列。

清除浮動(dòng)的關(guān)鍵字是clear,官方定義如下:


這時(shí)候就要用到清除浮動(dòng)(clear),如果單純根據(jù)官方定義,讀者可能會(huì)嘗試這樣寫(xiě):在div1的CSS樣式中添加clear:right;,理解為不允許div1的右邊有浮動(dòng)元素,由于div2是浮動(dòng)元素,因此會(huì)自動(dòng)下移一行來(lái)滿足規(guī)則。

其實(shí)這種理解是不正確的,這樣做沒(méi)有任何效果。

對(duì)于CSS的清除浮動(dòng)(clear),一定要牢記:這個(gè)規(guī)則只能影響使用清除的元素本身,不能影響其他元素。

怎么理解呢?就拿上邊的例子來(lái)說(shuō),我們是想讓div2移動(dòng),但我們卻是在div1元素的CSS樣式中使用了清除浮動(dòng),試圖通過(guò)清除div1右邊的浮動(dòng)元素(clear:right;)來(lái)強(qiáng)迫div2下移,這是不可行的,因?yàn)檫@個(gè)清除浮動(dòng)是在div1中調(diào)用的,它只能影響div1,不能影響div2。

要想讓div2下移,就必須在div2的CSS樣式中使用浮動(dòng)。本例中div2的左邊有浮動(dòng)元素div1,因此只要在div2的CSS樣式中使用clear:left;來(lái)指定div2元素左邊不允許出現(xiàn)浮動(dòng)元素,這樣div2就被迫下移一行。

那么假如頁(yè)面中只有兩個(gè)元素div1、div2,它們都是右浮動(dòng)呢?讀者此時(shí)應(yīng)該已經(jīng)能自己推測(cè)場(chǎng)景,如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文以div元素布局為例。教程開(kāi)始:首先要知道,div是塊級(jí)元素(div與span),在頁(yè)面中獨(dú)占一行,自上而下排...
    TW妖妖閱讀 426評(píng)論 0 1
  • 本文為轉(zhuǎn)載文章,轉(zhuǎn)載地址:經(jīng)驗(yàn)分享:CSS浮動(dòng)(float 寫(xiě)在前面的話: 如果讀者理解CSS盒子模型,但對(duì)于浮動(dòng)...
    翻炒吧蛋滾飯閱讀 1,117評(píng)論 1 14
  • 對(duì)于剛剛?cè)腴T(mén)學(xué)習(xí)前端的渣渣來(lái)說(shuō),對(duì)于css浮動(dòng)甚是不解,故找來(lái)優(yōu)秀并通俗易解的文章來(lái)記錄。 教程開(kāi)始: 首先要知道...
    呆呆滴木木菇?jīng)?/span>閱讀 396評(píng)論 0 1
  • 作者:楊元原文地址:http://www.cnblogs.com/iyangyuan 很早以前就接觸過(guò)CSS,但對(duì)...
    IT程序獅閱讀 701評(píng)論 1 12
  • 千里外,一望故土夜憑欄。 陽(yáng)山南,陽(yáng)山過(guò)后是連山,山巒疊嶂迷曉霧,一望家鄉(xiāng)心茫然。 山連山,山道彎,一彎過(guò)后又一彎...
    托婭巴圖閱讀 301評(píng)論 0 0

友情鏈接更多精彩內(nèi)容