一,什麼是.clearfix
你只要到google或者baidu隨便一搜"css清除浮動",就會發現很多**都講到"盒子清除內部浮動時可以用到.clearfix"。
.clearfix:after
.clearfix
上面的**就是.clearfix的定義和應用,簡單的說下.clearfix的原理:
1、在ie6, 7下zoom: 1會觸發haslayout,從而使元素閉合內部的浮動。
2、在標準瀏覽器下,.clearfix:after這個偽類會在應用到.clearfix的元素後面插入乙個clear: both的塊級元素,從而達到清除浮動的作用。
二,.clearfix的弊端
在上面的**中可以看到,拋開ie6, 7不談,.clearfix在標準瀏覽器下插入了乙個clear: both的元素,這樣很可能清除掉不必要的浮動。舉例來說明:
上面的**構成乙個兩列布局的頁面。注意.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的值不為none。overflow的值不為visible。display的值為table-cell, table-caption, inline-block中的任何乙個。position的值不為relative和static。
很明顯,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 div class clearfix div class floated div div 上面...
閒聊CSS之關於clearfix 清除浮動
一,什麼是.clearfix 你只要到google或者baidu隨便一搜 css清除浮動 就會發現很多 都講到 盒子清除內部浮動時可以用到.clearfix clearfix after clearfix div class clearfix div class floated div div 上面...
關於炒股的閒聊
經過朋友的推薦,以及近期口袋有些緊,於是入了 想發點小財,能夠掙個2000左右就行了。自己還覺得能夠把握住自己,也認為這是人生的一種體驗,就這樣帶著希望與好奇我走進了 帶著這樣的想法剛開始投入了2w買了2000股,看著它一點一點的漲,那個心情叫做激動啊,雖然只是賺了200 還沒套現的 於是膽子也大了...