浮動與清除

浮動和清除是用來組織頁面布局的又一柄利劍,這柄劍的劍刃就是float和clear屬性奕污。
浮動和清除是用來組織頁面布局的又一柄利劍萎羔,這柄劍的劍刃就是float和clear屬性。浮
動碳默,你看這倆字兒多形象贾陷,意思就是把元素從常規(guī)文檔流中拿出來缘眶。拿出來干什么?一是
可以實現(xiàn)傳統(tǒng)出版物上那種文字繞排圖片的效果髓废,二是可以讓原來上下堆疊的塊級元素巷懈,
變成左右并列,從而實現(xiàn)布局中的分欄瓦哎。
浮動元素脫離了常規(guī)文檔流之后砸喻,原來緊跟其后的元素就會在空間允許的情況下,向上提
升到與浮動元素平起平坐蒋譬。
浮動的第一個例子:

  1. 文本繞排圖片
    為了實現(xiàn)文本繞排圖片的浮動效果割岛,必須在標記中先寫圖片,然后再寫環(huán)繞它的文本犯助。
    <img …… />
    <p>…the paragraph text…</p>
    CSS規(guī)則如下:
    /為簡明起見癣漆,省略了字體聲明/
    p {margin:0; border:1px solid red;}
    /外邊距防止圖片緊挨文本/
    img {float:left; margin:0 4px 4px 0;}
    以上規(guī)則會讓圖片浮動到左側(cè),從而讓文本繞排到右側(cè)剂买。如下圖所示:
    image.png

    圖3-16 浮動圖片會從文檔流中被移除惠爽,如果在標記中有文本元素跟在它后面,則其中
    的文本會繞開圖片
    說得形象一點瞬哼,在你浮動一張圖片或者其他元素時婚肆,你是在要求瀏覽器把它往上方推,直
    到它碰到父元素(也就是body元素)的內(nèi)邊界坐慰。后面的段落(帶灰色邊框)不再認為浮動
    元素在文檔流中位于它的前面了较性,因而它會占據(jù)父元素左上角的位置。不過结胀,它的內(nèi)容
    (文本)會繞開浮動的圖片赞咙。
    *************************************************************************************************************************************A*
    浮動非圖片元素時,必須給它設(shè)定寬度糟港,否則后果難以預(yù)料攀操。圖片無所謂,因為它本身
    有默認的寬度秸抚。
  2. 創(chuàng)建分欄
    在此基礎(chǔ)上創(chuàng)建多欄速和,只要再用一次float屬性,就這么簡單剥汤。如圖3-17所示健芭,只要給段落
    設(shè)定寬度,然后也浮動它即可秀姐。
    p {float:left; margin:0; width:200px; border:1px solid red;}
    img {float:left; margin:0 4px 4px 0;}
    image.png

    你這樣同時浮動圖片和“有寬度的”段落慈迈,會導致段落的文本繞排效果消失,而浮動的段落
    也會盡可能向左向上移動。就這樣痒留,這個段落就構(gòu)成了緊挨著圖片的一欄谴麦。這就是使
    用float屬性創(chuàng)建多欄布局的原理。換句話說伸头,如果幾個相鄰的元素都具有設(shè)定的寬度匾效,都
    是浮動的,而且水平空間也足以容納它們恤磷,它們就會并列排在一行面哼。
    如果你創(chuàng)建了三個浮動、固定寬度的元素扫步,它們就會像這樣并排在一行魔策,構(gòu)成三欄布局的
    框架。每個元素都可以作為容器河胎,包含其他元素闯袒。
    3.圍住浮動元素的三種方法
    浮動元素脫離了文檔流,其父元素也看不到它了游岳,因而也不會包圍它政敢。這種情況有時候并
    非我們想要的,本節(jié)向大家傳授三種圍住浮動子元素的方法胚迫。記住喷户,這三種方法你都得掌
    握,這樣才能審時度勢访锻,選擇最合適的一種摩骨。
    為了演示浮動元素的行為,這種行為對布局會產(chǎn)生什么影響朗若,以及解決這個問題的三種方
    法,我們首先要從一張帶標題的圖片開始昌罩。圖片和標簽包含在一個section元素中哭懈,
    而section元素后面跟著一個footer元素【ビ茫可以把這個footer元素想象成很多網(wǎng)頁底部都
    會有的與頁面同寬的頁腳遣总。
    <section>
    <img src="images/rubber_duck2.jpg">
    <p>It’s fun to float.</p>
    </section>
    <footer> Here is the footer element that runs across the bottom of the page.</footer>
    section {border:1px solid blue; margin:0 0 10px 0;}
    /刪除默認的上下外邊距/
    p {margin 0;}
    /為簡明起見,省略了字體聲明/
    footer {border:1px solid red;}
    效果如下圖:
    image.png

    現(xiàn)在我們看到的是常規(guī)文檔流轨功,即塊級元素包圍著所有子元素旭斥,而且在頁面中自上而下相
    互堆疊在一起。假設(shè)我們想讓圖片標題位于圖片右側(cè)古涧,而不是像現(xiàn)在這樣位于下方垂券。運用
    剛剛學到的知識,我們知道實現(xiàn)這個目標最簡單的方式就是浮動圖片羡滑。
    section {border:1px solid blue; margin:0 0 10px 0;}
    img {float:left;}
    footer {border:1px solid red;}
    修改之后效果如下圖:
    image.png

    浮動圖片后標題跑到了右邊菇爪,但父元素section也收縮到只包含文本的高度高度
    媽呀算芯!標題倒是跑到右邊了,可section也不再包圍浮動元素了凳宙,它只包圍非浮動的元
    素熙揍。于是,footer被提了上來氏涩,緊挨著前一個塊級元素——section届囚。這樣是沒錯兒,可
    結(jié)果呢是尖,不是我們想要的意系。

解決方法
方法一: 為父元素添加overflow:hidden
第一個方法很簡單,缺點是不太直觀析砸,即為父元素應(yīng)用overflow:hidden昔字,以強制它包圍
浮動元素。
section {border:1px solid blue; margin:0 0 10px 0; overflow:hidden;}
img {float:left;}
p {border:1px solid red;}
把overflow:hidden聲明應(yīng)用到容器元素后首繁,footer又回到了我們期望的位置作郭,如下圖:


image.png

實際上,overflow:hidden聲明的真正用途是防止包含元素被超大內(nèi)容撐大弦疮。應(yīng)
用overflow:hidden之后夹攒,包含元素依然保持其設(shè)定的寬度,而超大的子內(nèi)容則會被容
器剪切掉胁塞。除此之外咏尝,overflow:hidden還有另一個作用,即它能可靠地迫使父元素包
含其浮動的子元素啸罢。
方法二 : 同時浮動父元素
第二種促使父元素包圍其浮動子元素的方法编检,是也讓父元素浮動起來。
section {border:1px solid blue; float:left; width:100%;}
img {float:left;}
footer {border:1px solid red; clear:left;}
浮動section以后扰才,不管其子元素是否浮動允懂,它都會緊緊地包圍(也稱收縮包裹)住它的
子元素。因此衩匣,需要用width:100%再讓section與瀏覽器容器同寬蕾总。另外,由于section
現(xiàn)在也浮動了琅捏,所以footer會努力往上擠到它旁邊去生百。為了強制footer依然呆在section
下方,要給它應(yīng)用clear:left柄延。被清除的元素不會被提升到浮動元素的旁邊蚀浆。
方法三:添加非浮動的清除元素
第三種強制父元素包含其浮動子元素的方法,就是給父元素的最后添加一個非浮動的子元
素,然后清除該子元素蜡坊。由于包含元素一定會包圍非浮動的子元素杠输,而且清除會讓這個子
元素位于(清除一側(cè))浮動元素的下方,因此包含元素一定會包含這個子元素——以及前
面的浮動元素秕衙。在包含元素最后添加子元素作為清除元素的方式有兩種蠢甲。
第一種方式不太理想,也就是簡單地在HTML標記中添加一個子元素据忘,并給它應(yīng)用clear屬
性鹦牛。由于沒有默認的樣式,不會引入多余空間勇吊,div元素很適合這個目的曼追。
<section>
<img src="images/rubber_duck.jpg">
<p>It's fun to float.</p>
<div class="clear_me"></div>
</section>
<footer> Here is the footer element…</footer>
在此,我為div添加了一個類汉规,以便于在CSS中添加它礼殊。
section {border:1px solid blue;}
img {float:left;}
.clear_me {clear:left;}
footer {border:1px solid red;}
這樣,浮動的元素被父元素包圍住了针史。
如果你特別不想添加這個純表
現(xiàn)性元素晶伦,我再告訴你一個用CSS來添加這個清除元素的方法。首先啄枕,要給section添加一
個類婚陪。
<section class="clearfix">
<img src="images/rubber_duck.jpg">
<p>It's fun to float.</p>
</section>
<footer> Here is the footer element…</footer>
然后,再使用這個神奇的clearfix規(guī)則频祝!
.clearfix:after {
content:".";
display:block;
height:0;
visibility:hidden;
clear:both;
}
好了泌参,該回過頭來作個總結(jié)了。要想強迫父元素包圍其浮動的子元素有三種方式常空,哪三
種沽一?
為父元素應(yīng)用overflow:hidden
浮動父元素
在父元素內(nèi)容的末尾添加非浮動元素,可以直接在標記中加漓糙,也可以通過給父元素添
加clearfix類來加(當然铣缠,樣式表中得需要相應(yīng)的clearfix規(guī)則)
這三種方法的使用要因地制宜。比如兼蜈,不能在下拉菜單的頂級元素上應(yīng)
用overflow:hidden,否則作為其子元素的下拉菜單就不會顯示了拙友。因為下拉菜單會顯示
在其父元素區(qū)域的外部为狸,而這恰恰是overflow:hidden所要阻止的。再比如遗契,不能對已經(jīng)
靠自動外邊距居中的元素使用“浮動父元素”技術(shù)辐棒,否則它就不會再居中,而是根據(jù)浮動值
浮動到左邊或右邊了⊙總之泰涂,掌握了這三種技術(shù)之后,再碰到需要包圍浮動元素的情況辐怕,
你就能夠游刃有余了逼蒙。


實例 :
當我們遇到多個元素向上浮動
如下圖所示:
其中包含6個元素:3張圖片和介紹它們的3個文本段落。這個頁面布局是通過浮動圖片實現(xiàn)的寄疏,因此在標記中跟在圖片后面的文本會向
上走是牢,停靠在浮動圖片的右側(cè)陕截。


image.png

由于第二段文字下方有空間驳棱,所以第三張圖片及說明文字會上浮到第二張圖片右側(cè),這不是我們想要的結(jié)果
<section>
<img src="images/rubber_duck3.jpg">
<p>This text sits next to the image and because the…</p>
<img src="images/beach_ball.jpg">
<p>This text is short, so the next image can float up…</p>
<img src="images/yellow_float.jpg">
<p>Because the previous image’s text does not…</p>
</section>
我使用clearfix規(guī)則修改
.clearfix:after {
content:".";
display:block;
height:0;
visibility:hidden;
clear:both;
}
像這樣給每個段落都加上clearfix類:
<section>
<img src="images/rubber_duck3.jpg">
<p class="clearfix">This text sits next to the image and because the…</p>
<img src="images/beach_ball.jpg">
<p class="clearfix">This text is short, so the next image can float up…</p>
<img src="images/yellow_float.jpg">
<p class="clearfix">Because the previous image’s text does not…</p>.
</section>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末农曲,一起剝皮案震驚了整個濱河市社搅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乳规,老刑警劉巖形葬,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驯妄,居然都是意外死亡荷并,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門青扔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來源织,“玉大人,你說我怎么就攤上這事微猖√赶ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵凛剥,是天一觀的道長侠仇。 經(jīng)常有香客問我,道長犁珠,這世上最難降的妖魔是什么逻炊? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮犁享,結(jié)果婚禮上余素,老公的妹妹穿的比我還像新娘。我一直安慰自己炊昆,他們只是感情好桨吊,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布威根。 她就那樣靜靜地躺著,像睡著了一般视乐。 火紅的嫁衣襯著肌膚如雪洛搀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天佑淀,我揣著相機與錄音留美,去河邊找鬼。 笑死渣聚,一個胖子當著我的面吹牛独榴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奕枝,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棺榔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了隘道?” 一聲冷哼從身側(cè)響起症歇,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谭梗,沒想到半個月后忘晤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡激捏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年设塔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片远舅。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闰蛔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出图柏,到底是詐尸還是另有隱情序六,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布蚤吹,位于F島的核電站例诀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏裁着。R本人自食惡果不足惜繁涂,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望二驰。 院中可真熱鬧扔罪,春花似錦、人聲如沸诸蚕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽背犯。三九已至坏瘩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漠魏,已是汗流浹背倔矾。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柱锹,地道東北人哪自。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像禁熏,于是被迫代替她去往敵國和親壤巷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 原文地址:浮動與清除浮動 浮動 浮動的概念 浮動元素會脫離文檔流并向左/向右浮動瞧毙,直到碰到父元素或者另一個浮動元素...
    薛普定朗諤克閱讀 770評論 3 14
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案胧华? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,753評論 1 92
  • 一、float:主要目的是為了實現(xiàn)文本繞排圖片的效果宙彪。也成了創(chuàng)建多欄布局最簡單的方式矩动。 【1】文本繞排圖片 【2】...
    Rose_yang閱讀 192評論 0 0
  • 有些屬性就像姑娘一樣讓人愛的深沉悲没,又像敵人一樣讓人肉痛不已,float即是如此男图。 什么是浮動 ??浮動是脫離文檔的...
    果汁涼茶丶閱讀 1,588評論 0 3
  • 掐指一算享言,從7月25日開始到今天峻凫,整整28天,四周的時間览露,我居然堅持下來了荧琼,我居然連續(xù)寫了28篇文章,我居然早起了...
    正零閱讀 166評論 0 1