摘要:本文概述本文的框架圖如下一浮動到底是什么中給出的浮動定義為浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框?yàn)橹埂H绻阉腥齻€框都向左浮動,那么框向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。
本文概述
本文的框架圖如下:
一、浮動到底是什么?W3school中給出的浮動定義為浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框?yàn)橹埂?/b>由于浮動框脫離文檔的普通流中,所以文檔的普通流中的塊框表現(xiàn)得就像浮動框不存在一樣。
浮動的特點(diǎn),可以用八個字總結(jié):脫標(biāo)、貼邊、字圍和收縮。
為了更好說明,請看下圖:
當(dāng)框 1 向左浮動時,它脫離文檔流(脫標(biāo))并且向左移動(貼邊),直到它的左邊緣碰到包含框的左邊緣。因?yàn)樗辉偬幱谖臋n流中,所以它不占據(jù)空間,實(shí)際上覆蓋住了框 2,使框 2 從視圖中消失。如果框2中有文字,就會圍著框1排開(字圍)。
如果把所有三個框都向左浮動,那么框 1 向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。
下面著重講解下第四個特點(diǎn)--收縮
一個浮動的內(nèi)聯(lián)元素(比如span img標(biāo)簽)不需要設(shè)置display:block就可以設(shè)置寬度。
這是一段文字
得到以下的效果:
我們都知道div標(biāo)簽是塊級元素,會獨(dú)占一行,然而上面的例子中將div設(shè)置為左浮后,其寬度不再是占滿一行,而是收緊為內(nèi)部元素的寬度,這就是浮動第四個特征的含義。
先看下面這段代碼:
我們想讓父容器包裹著三個浮動元素,然而事與愿違,得到卻是這樣的結(jié)果:
這就是浮動帶來副作用----父容器高度塌陷,于是清理浮動就顯著至關(guān)重要。
四、如何清理浮動?清除浮動不是不用浮動,清除浮動產(chǎn)生的父容器高度塌陷。
套路1:給浮動元素的父元素添加高度(擴(kuò)展性不好)如果一個元素要浮動,那么它的父元素一定要有高度。高度的盒子,才能關(guān)住浮動。可以通過直接給父元素設(shè)置height,實(shí)際應(yīng)用中我們不大可能給所有的盒子加高度,不僅麻煩,并且不能適應(yīng)頁面的快速變化;另外一種,父容器的高度可以通過內(nèi)容撐開(比如img圖片),實(shí)際當(dāng)中此方法用的比較多。
套路2:clear:both;在最后一個子元素新添加最后一個冗余元素,然后將其設(shè)置clear:both,這樣就可以清除浮動。這里強(qiáng)調(diào)一點(diǎn),即在父級元素末尾添加的元素必須是一個塊級元素,否則無法撐起父級元素高度。
#wrap{ border: 1px solid; } #inner{ float: left; width: 200px; height: 200px; background: pink; }套路3:偽元素清除浮動
上面那種辦法固然可以清除浮動,但是我們不想在頁面中添加這些沒有意義的冗余元素,此時如何清除浮動嗎?
結(jié)合 :after 偽元素和 IEhack ,可以完美兼容當(dāng)前主流的各大瀏覽器,這里的 IEhack 指的是觸發(fā) hasLayout。
#wrap { border: 1px solid; } #inner { float: left; width: 200px; height: 200px; background: pink; } /*開啟haslayout*/ .clearfix { *zoom: 1; } /*ie6 7 不支持偽元素*/ .clearfix:after { content: ""; display: block; clear: both; height:0; line-height:0; visibility:hidden;//允許瀏覽器渲染它,但是不顯示出來 }
給浮動元素的父容器添加一個clearfix的class,然后給這個class添加一個:after偽元素,實(shí)現(xiàn)元素末尾添加一個看不見的塊元素來清理浮動。這是通用的清理浮動方案,推薦使用
套路4:給父元素使用overflow:hidden;這種方案讓父容器形成了BFC(塊級格式上下文),而BFC可以包含浮動,通常用來解決浮動父元素高度坍塌的問題。
BFC的觸發(fā)方式
我們可以給父元素添加以下屬性來觸發(fā)BFC:
float 為 left | right
overflow 為 hidden | auto | scorll
display 為 table-cell | table-caption | inline-block
position 為 absolute | fixed
這里可以給父元素設(shè)置overflow:auto,但是為了兼容IE最好使用overflow:hidden。
但這種辦法有個缺陷:如果有內(nèi)容出了盒子,用這種方法就會把多的部分裁切掉,所以這時候不能使用。
BFC的主要特征:
BFC容器是一個隔離的容器,和其他元素互不干擾;所以我們可以用觸發(fā)兩個元素的BFC來解決垂直邊距折疊問題。
BFC不會重疊浮動元素
BFC可以包含浮動,這可以清除浮動。
套路5:br標(biāo)簽清浮動br標(biāo)簽存在一個屬性:clear。這個屬性就是能夠清除浮動的利器,在br標(biāo)簽中設(shè)置屬性clear,并賦值all。即能清除掉浮動。
#wrap { border: 1px solid; } #inner { float: left; width: 200px; height: 200px; background: pink; }
如果覺得文章對你有些許幫助,歡迎在我的GitHub博客點(diǎn)贊和關(guān)注,感激不盡!
參考文章 br清浮動的原理與clear:both的兼容 清浮動 | 如何清除浮動 CSS-清除浮動文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/53263.html
摘要:本文概述本文的框架圖如下一浮動到底是什么中給出的浮動定義為浮動的框可以向左或向右移動,直到它的外邊緣碰到包含框或另一個浮動框的邊框?yàn)橹埂H绻阉腥齻€框都向左浮動,那么框向左浮動直到碰到包含框,另外兩個框向左浮動直到碰到前一個浮動框。 本文概述 本文的框架圖如下: showImg(https://segmentfault.com/img/remote/1460000016978861?...
摘要:原因元素設(shè)置了屬性后,就會脫離文檔流,當(dāng)包含框的高度小于浮動框的時候,會出現(xiàn)高度塌陷。因此才需要清除浮動表現(xiàn)如圖包括框已經(jīng)包不住的圖片了清除浮動方法給包含框添加偽元素清除浮動。代碼使用,原理讓浮動塊包含在同一個中。原因: 元素設(shè)置了float屬性后,就會脫離文檔流,當(dāng) 包含框 的高度小于 浮動框 的時候,會出現(xiàn)高度塌陷。因此才需要清除浮動! 表現(xiàn)如圖:包括框container已經(jīng)包不住flo...
摘要:最近學(xué)習(xí)發(fā)現(xiàn)了高度塌陷時候要清除浮動為了理解清楚浮動原理網(wǎng)上找了不少資料發(fā)現(xiàn)都寫的不是很清楚而且都是一模一樣的內(nèi)容我在里分享一下我對清楚浮動原理的理解如果你已經(jīng)很了解什么是浮動和浮動的效果你可以直接跳轉(zhuǎn)到三如何清除浮動重點(diǎn)閱讀一什么是浮動最近學(xué)習(xí)css發(fā)現(xiàn)了高度塌陷時候要清除浮動,為了理解清楚浮動原理,網(wǎng)上找了不少資料,發(fā)現(xiàn)都寫的不是很清楚,而且都是一模一樣的內(nèi)容,我在里分享一下我對清楚浮動...
閱讀 1729·2021-11-22 12:09
閱讀 1459·2019-08-30 13:22
閱讀 2092·2019-08-29 17:00
閱讀 2642·2019-08-29 16:28
閱讀 2953·2019-08-26 13:51
閱讀 1181·2019-08-26 13:25
閱讀 3243·2019-08-26 12:14
閱讀 3014·2019-08-26 12:14