浮動與浮動的清除

2022-08-27 19:45:12 字數 2126 閱讀 4311

說浮動就必須提及一下文件流,html當中的元素按照從左到右,從上到下的順序進行排列稱之為文件流,也就是正常排列。

而浮動是什麼呢?浮動會讓元素脫離文件流,假如a元素浮動了,原本排在該元素之後的元素發現a元素不在這個文件流了,就會無視它往上接到a元素前面的元素之後(ps:但是文字並不會無視它,還會環繞a元素,也就是a元素沒有脫離文字流,

而如果使用position的絕對定位會連文字流也脫離文件流。

浮動的好處當然是布局了,例如通過浮動來形成三列布局,文字環繞等等。但是浮動也有乙個問題,那就是會導致高度的塌陷,就像上面的顯示,父元素的高度塌陷了,並沒有將浮動的子元素包裹進去,這樣子就會造成布局上的錯誤。

什麼是bfc?bfc是block formatting context的縮寫,也就是塊級格式化上下文,建立bfc有以下情況:

bfc的特性就是包裹浮動的元素。按照我的理解,當你建立bfc之後元素就會把裡面的東西視為自己的東西,包括浮動元素,然後建立乙個私有領域給包裹進來。此外bfc還有還有如下特性。

1.讓原本會疊加的上下外邊距疊加無效。將想要邊距失效的兩個盒子分別放入乙個父盒子,然後為父盒子建立bfc。

2.建立bfc的元素將不會圍繞浮動元素,圖中文字用p標籤包裹並建立bfc,右上角浮動元素,可以看見文字並沒有環繞浮動元素。

清除浮動方法大致有兩類,一類是clear:both | left | right,另一類則是建立bfc,細分又可以分為多種。

優點:簡單。

缺點:增加了額外的標籤,並且很顯然這並不符合語義化。

*使用 br標籤和其自身的 html屬性,br 有clear=all | left | right | none;的屬性。

優點:簡單**量少,比空標籤語義化稍好。

缺點:同上。

ps:由於ie6-7不支援:after,使用``zoom:1觸發haslayout`。其實是通過 content 在元素的後面生成了內容為空的塊級元素

**如下

.clearfix:after 

.clearfix

優點:結構和語義化完全正確,**量居中。

缺點:復用方式不當會造成**量增加。

偽元素還有一種寫法

// 用display:table 是為了避免外邊距margin重疊導致的margin塌陷, 內部元素缺省會成為 table-cell 單元格的形式

.clearfix:before, .clearfix:after

.clearfix:after

.clearfix

優點:不存在結構和語義化問題,**量極少。

缺點:由於hidden的原因,當內容增多時候容易造成不會自動換行導致內容被隱藏掉,無法顯示需要溢位的元素,還會導致中鍵失效(滑鼠中鍵)。

優點:同上

缺點:多個巢狀後,會有bug,詳情看原文。

優點:**少

缺點:總不能一直浮動到body吧。

優點:結構語義化完全正確,**量極少。

缺點:會造成盒模型的改變。

其餘的參考上面如何建立bfc。

那些年我們一起清除過的浮動

關於block formatting context--bfc和ie的haslayout

理解css布局和bfc

浮動與清除浮動

left 元素向左浮動。right 元素向右浮動。none 預設值。元素不浮動,並會顯示在其在文字中出現的位置。浮動的特性 浮動元素會從普通文件流中脫離,但浮動元素影響的不僅是自己,它會影響周圍的元素對齊進行環繞。不管乙個元素是行內元素還是塊級元素,如果被設定了浮動,那浮動元素會生成乙個塊級框,可以...

浮動與清除浮動

為元素設定了浮動之後,元素就會脫離文件流 可以看做是漂浮在文件流之上 存在。所有產生了浮動流的元素,塊級元素看不到它們。產生了bfc的元素和文字類屬性 inline 的元素以及文字都能看到浮動元素。如何觸發乙個盒子的bfc?position absolute float left right dis...

浮動與清除浮動

浮動布局是一種常見的布局方式,最初的使用目的是進行 的混排 清除浮動 浮動的使用場景 浮動通過css定義 div1 浮動可以取的值 none 預設 left right 當元素進行左浮動或者右浮動之後會脫離文件流,並且構成乙個浮動流,會覆蓋在沒有浮動的元素上,並且允許文字和內聯元素環繞在它周圍 浮動...