摘要:父元素的頂端會(huì)限制浮動(dòng)元素防止一直浮動(dòng)到頁面頂端。例子戳這里清除浮動(dòng)清除浮動(dòng)的目的是為了解決高度塌陷的問題撐開浮動(dòng)父元素。原理會(huì)在元素的之上增加一個(gè)清除區(qū)域這個(gè)區(qū)域會(huì)在元素的上增加額外間隔并且不允許浮動(dòng)元素進(jìn)入這個(gè)區(qū)域。
浮動(dòng)概念
浮動(dòng)元素會(huì)脫離文檔的普通流,根據(jù)float的值向左或向右移動(dòng),直到它的外邊界碰到父元素的內(nèi)邊界或另一個(gè)浮動(dòng)元素的外邊界為止。由于浮動(dòng)框不在文檔的普通流中,所以文檔的普通流中的塊級(jí)元素表現(xiàn)得就像浮動(dòng)元素不存在一樣。
浮動(dòng)影響 浮動(dòng)元素會(huì)造成父元素塌陷當(dāng)給元素設(shè)置float之后,元素脫離文檔流,父元素沒有設(shè)置height,造成塌陷。
浮動(dòng)元素的左(右)外邊界不能超出其父元素的左(右)內(nèi)邊界。.super{ border:1px solid blue; } .sub{ float: left; background: pink; border: 1px solid red; width: 100px; height: 100px; }
在不設(shè)置margin為負(fù)值和父元素還有剩余空間的情況下,浮動(dòng)元素的外邊界(margin)不會(huì)超出父元素的內(nèi)邊界(padding)。
浮動(dòng)元素不會(huì)重疊。.super{ margin: 0 auto; padding: 10px; border:1px solid blue; width: 300px; } .super:after{ clear: both; content: ""; display: block; } .sub1{ float: left; background: pink; border: 1px solid red; width: 100px; height: 100px; } .sub2{ float: right; background: pink; border: 1px solid red; width: 100px; height: 100px; }
這個(gè)也是在margin不會(huì)為負(fù)值和父元素還有剩余空間的條件下適用的。
這個(gè)是我對(duì)《CSS權(quán)威指南》中浮動(dòng)這一章節(jié)中規(guī)則二和規(guī)則三的理解,以下是原文。
2.The left (or right) outer edge of a floated element must be to the right (or left) of the right (left) outer edge of a left-floating (or right-floating) element that occurs earlier in the document’s source, unless the top of the later element is below the bottom of the former.
3.The right outer edge of a left-floating element may not be to the right of the left outer edge of any right-floating element to its right. The left outer edge of a right- floating element may not be to the left of the right outer edge of any left-floating element to its left.
這兩個(gè)規(guī)則是保證兩個(gè)浮動(dòng)元素不重疊的基礎(chǔ)。
表現(xiàn)為當(dāng)一個(gè)浮動(dòng)元素往左(右)靠的時(shí)候,在這個(gè)元素左(右)邊已經(jīng)存在一個(gè)浮動(dòng)元素,他們不會(huì)重疊,后來者緊挨著先來者排列。如果浮動(dòng)元素們的總寬度已經(jīng)超過父元素的寬度,浮動(dòng)元素之間也不會(huì)重疊,依照HTML結(jié)構(gòu)的順序,從在一行排列不下的浮動(dòng)元素開始會(huì)移動(dòng)到下一行。
例子戳這里!
這個(gè)規(guī)則也是在margin-top不為負(fù)值的情況下成立。
父元素的頂端會(huì)限制浮動(dòng)元素,防止一直浮動(dòng)到頁面頂端。
對(duì)于下圖右邊的例子,sub2在sub1下面,sub1右邊的空間已經(jīng)不足以容納sub2,但是足夠容納sub3,而sub3沒有上浮,那是因?yàn)樗牡捻敹司筒荒艹^sub2的頂端,這個(gè)例子足以印證浮動(dòng)元素的頂端不能比之前出現(xiàn)的浮動(dòng)元素頂端高。
例子戳這里!
清除浮動(dòng)的目的是為了解決高度塌陷的問題,撐開浮動(dòng)父元素。常用的一般有幾種方法:
增加一個(gè)樣式為clear:both的空標(biāo)簽把上面這句標(biāo)簽放到浮動(dòng)元素的父元素的最后。
原理:clear會(huì)在元素的margin-top之上增加一個(gè)清除區(qū)域(clearance),這個(gè)區(qū)域會(huì)在元素的margin-top上增加額外間隔,并且不允許浮動(dòng)元素進(jìn)入這個(gè)區(qū)域。
優(yōu)點(diǎn):方便,兼容性強(qiáng)。
缺點(diǎn):多出許多無意義的標(biāo)簽,增加維護(hù)成本,而且稍不注意中間多了個(gè)空格會(huì)產(chǎn)生一段空白高度。
父元素設(shè)置浮動(dòng)優(yōu)點(diǎn):簡(jiǎn)單,代碼少,瀏覽器支持好。
缺點(diǎn):父級(jí)使用浮動(dòng)之后,浮動(dòng)造成的影響仍舊存在,并且不可能父級(jí)往上一級(jí)級(jí)都使用浮動(dòng)。
.fix{ overflow:hidden(auto、scroll); zoom:1; }
優(yōu)點(diǎn):代碼簡(jiǎn)潔,兼容性好,不產(chǎn)生多余標(biāo)簽。
缺點(diǎn):設(shè)置該fix類的標(biāo)簽的內(nèi)容超出該標(biāo)簽的時(shí)候會(huì)被隱藏(或產(chǎn)生滾動(dòng)條)。
父元素設(shè)置浮動(dòng)優(yōu)點(diǎn):簡(jiǎn)單,代碼少,瀏覽器支持好。
缺點(diǎn):父級(jí)使用浮動(dòng)之后,浮動(dòng)造成的影響仍舊存在,并且不可能父級(jí)往上一級(jí)級(jí)都使用浮動(dòng)。
原理:在position的值不為relative或static的情況下,會(huì)形成BFC。
這種方式在父元素原本就需要設(shè)置position為fixed或者absolute的時(shí)候可以優(yōu)先采用。
優(yōu)點(diǎn):簡(jiǎn)單,代碼少,瀏覽器支持好。
缺點(diǎn):改變父元素布局,影響整體布局。
.fix:after{ display:block; content:""; clear:both; }
原理類似添加新的標(biāo)簽然后設(shè)置clear:both;,但使用偽類的方法沒有多余標(biāo)簽。
優(yōu)點(diǎn):代碼簡(jiǎn)潔,兼容性好,不產(chǎn)生多余標(biāo)簽。
以上方法中,第一種增加一個(gè)樣式為clear:both的空標(biāo)簽的方法不建議使用,會(huì)增加無意義標(biāo)簽,其他設(shè)置父元素浮動(dòng),改變父元素position、overflow的方法依情況而定,如果父元素本身就有這方面的樣式需求,那很合適,如果沒有的話還是采用最后一種偽元素的:after的方式最為常見。
總結(jié)關(guān)于浮動(dòng)的學(xué)問還有更可深入的空間,這篇博客也只是對(duì)自己學(xué)習(xí)的成果起到梳理作用,對(duì)于浮動(dòng)在各場(chǎng)景產(chǎn)生的影響,需要大量的實(shí)踐去累積去體會(huì),才能深刻掌握float,在日后有新的認(rèn)識(shí)的時(shí)候會(huì)再回來更新,如有不同見解也歡迎大家前來指正。
參考《CSS權(quán)威指南》
CSS float浮動(dòng)的深入研究、詳解及拓展(一) by 張?chǎng)涡?/p>
CSS float浮動(dòng)的深入研究、詳解及拓展(二) by 張?chǎng)涡?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/111327.html
摘要:如下圖所示可以看到父元素的高度為為了解決這種狀況就要清除浮動(dòng)了。下面詳細(xì)看一下這兩大類清除浮動(dòng)的方式及原理。所以,避免穿透啊,清除浮動(dòng)什么的也好理解了。 關(guān)于浮動(dòng) 設(shè)置為浮動(dòng)的元素會(huì)脫離當(dāng)前文檔流,向左或向右移動(dòng)直到邊緣遇到另一個(gè)浮動(dòng)元素或者到達(dá)邊界。普通元素不會(huì)對(duì)齊造成影響。 浮動(dòng)是把雙刃劍,在給我們的布局帶來便利的同時(shí)有一些缺點(diǎn)需要我們?nèi)ソ鉀Q。例如最常見的父元素塌陷。如下圖所示:...
摘要:元素框從文檔流完全刪除,并相對(duì)于其包含塊定位。產(chǎn)生折疊的必備條件必須是鄰接的而根據(jù)規(guī)范,兩個(gè)是鄰接的必須滿足以下條件必須是處于常規(guī)文檔流非和絕對(duì)定位的塊級(jí)盒子并且處于同一個(gè)當(dāng)中。 1.浮動(dòng)元素有什么特征?對(duì)父容器、其他浮動(dòng)元素、普通元素、文字分別有什么影響? 何謂浮動(dòng)元素?有什么特征?所謂浮動(dòng)元素,即是設(shè)置了浮動(dòng)屬性的元素。其特征為: 1.浮動(dòng)的框可以向左或者向右移動(dòng),直到它的外...
摘要:是指塊級(jí)元素,就是會(huì)強(qiáng)制換行的元素,比如。將元素推向左側(cè)。請(qǐng)根據(jù)不同的實(shí)際情況,選擇最合適的方式。再次重申一下,是為子元素創(chuàng)建定位環(huán)境。,由于浮動(dòng)元素占據(jù)了一定的寬度,新創(chuàng)建的會(huì)因此而變窄。這里只是為了更好地去理解而做一個(gè)例子。 什么是 BFC W3C 為瀏覽器規(guī)定了三種定位模型:Normal Flow, 浮動(dòng), 和絕對(duì)定位。本文所介紹的 BFC (Block Formatting M...
摘要:當(dāng)中包含屬性時(shí),如果沒有包含空格,會(huì)造成清除浮動(dòng)元素的頂部底部有一個(gè)空白設(shè)置也可以解決這個(gè)問題。這樣做,其一是為了和其他清除浮動(dòng)的方式的效果保持一致其二,是為了與下設(shè)置后的效果一致即阻止合并的效果。 Boostrap清除浮動(dòng)的css如下: .clearfix:before, .clearfix:after { content: ; display: table; } ...
閱讀 1217·2021-11-23 09:51
閱讀 1995·2021-10-08 10:05
閱讀 2354·2019-08-30 15:56
閱讀 1912·2019-08-30 15:55
閱讀 2647·2019-08-30 15:55
閱讀 2501·2019-08-30 13:53
閱讀 3513·2019-08-30 12:52
閱讀 1263·2019-08-29 10:57