閒聊CSS之關於clearfix 清除浮動

2021-06-28 11:56:09 字數 2183 閱讀 9044

一,什麼是.clearfix

你只要到google或者baidu隨便一搜"css清除浮動",就會發現很多**都講到"盒子清除內部浮動時可以用到.clearfix"。

.

clearfix

:after

.clearfix

<

div

class

="clearfix"

>

<

div

class

="floated"

>

div>

div>

上面的**就是.clearfix的定義和應用,簡單的說下.clearfix的原理:

1、在ie6, 7下zoom: 1會觸發haslayout,從而使元素閉合內部的浮動。

2、在標準瀏覽器下,.clearfix:after這個偽類會在應用到.clearfix的元素後面插入乙個clear: both的塊級元素,從而達到清除浮動的作用。

class

="floated"

>

style="

clear

:both

">

二,.clearfix的弊端

在上面的**中可以看到,拋開ie6, 7不談,.clearfix在標準瀏覽器下插入了乙個clear: both的元素,這樣很可能清除掉不必要的浮動。舉例來說明:

class

="left-col"

>

class

="right-col"

>

class

="placeholder"

>

上面的**構成乙個兩列布局的頁面。注意.menu這個選單設定了邊框,但是由於.menu的li元素是左浮動的,導致.menu沒有高度,於是可以用.clearfix來清除.menu內部的浮動。**如下:

但是應用完.clearfix後,在標準瀏覽器下頁面變得很亂,這是因為.clearfix:after把.left-col的浮動也給清除掉了。

三,重構.clearfix

在遭遇到上面的錯誤之後,分析一下除了.clearfix:after這種方式之外還有沒有別的方法清除元素內部的浮動。答案是有的,在白話block formatting contexts這篇文章中提到過構成block formatting context的元素可以清除內部元素的浮動。那麼只要使.clearfix形成block formatting context就好了。構成block formatting context的方法有下面幾種:

很明顯,float和position不合適我們的需求。那只能從overflow或者display中選取乙個。因為是應用了.clearfix和.menu的選單極有可能是多級的,所以overflow: hidden或overflow: auto也不滿足需求(會把下拉的選單隱藏掉或者出滾動條),那麼只能從display下手。

我們可以將.clearfix的display值設為table-cell, table-caption, inline-block中的任何乙個,但是display: inline-block會產生多餘空白,所以也排除掉。剩下的只有table-cell, table-caption,為了保證相容可以用display: table來使.clearfix形成乙個block formatting context,因為display: table會產生一些匿名盒子,這些匿名盒子的其中乙個(display值為table-cell)會形成block formatting context。這樣我們新的.clearfix就會閉合內部元素的浮動。下面是重構之後的.clearfix。

.

clearfix

四,總結

在ie6, 7下面只要是觸發了haslayout的元素就可以清除內部浮動了。而在標準瀏覽器下面清除元素內部浮動的方法有很多,除了.clearfix:after這種方式,其餘的方法無非就是產生新的block formatting context以達到目的。如果可以做到在什麼條件下用哪種方法,我認為這樣就足夠了......

本文**:

閒聊CSS之關於clearfix 清除浮動

一,什麼是.clearfix 你只要到google或者baidu隨便一搜 css清除浮動 就會發現很多 都講到 盒子清除內部浮動時可以用到.clearfix clearfix after clearfix 上面的 就是.clearfix的定義和應用,簡單的說下.clearfix的原理 1 在ie6,...

閒聊CSS之關於clearfix 清除浮動

一,什麼是.clearfix 你只要到google或者baidu隨便一搜 css清除浮動 就會發現很多 都講到 盒子清除內部浮動時可以用到.clearfix clearfix after clearfix div class clearfix div class floated div div 上面...

關於炒股的閒聊

經過朋友的推薦,以及近期口袋有些緊,於是入了 想發點小財,能夠掙個2000左右就行了。自己還覺得能夠把握住自己,也認為這是人生的一種體驗,就這樣帶著希望與好奇我走進了 帶著這樣的想法剛開始投入了2w買了2000股,看著它一點一點的漲,那個心情叫做激動啊,雖然只是賺了200 還沒套現的 於是膽子也大了...