<noframes id="5hjpd"><progress id="5hjpd"><form id="5hjpd"></form></progress>

    <noframes id="5hjpd">

    <span id="5hjpd"><progress id="5hjpd"><progress id="5hjpd"></progress></progress></span>
      <noframes id="5hjpd">
      <ins id="5hjpd"><sub id="5hjpd"><rp id="5hjpd"></rp></sub></ins>
      <del id="5hjpd"><big id="5hjpd"></big></del>
      <track id="5hjpd"></track>

      clearfix清除浮動進化史

      導語 我想大家在寫CSS的時候應該都對清除浮動的用法深有體會,今天我們就還討論下clearfix的進化史吧。首先在很多很多年以前我們常用的清除浮動是這樣的。 clear{clear:both;line-height:0;}現在可能還可以在很多老的
      clearfix

      我想大家在寫CSS的時候應該都對清除浮動的用法深有體會,今天我們就還討論下clearfix的進化史吧。

      clearfix清除浮動

      首先在很多很多年以前我們常用的清除浮動是這樣的。

      
      
      1. .clear{clear:both;line-height:0;}

      現在可能還可以在很多老的站點上可以看到這樣的代碼,相當暴力有效的解決浮動的問題。但是這個用法有一個致命傷,就是每次清除浮動的時候都需要增加一個空標簽來使用。

      這種做法如果在頁面復雜的布局要經常清楚浮動的時候就會產生很多的空標簽,增加了頁面無用標簽,不利于頁面優化。但是我發現大型網站中 居然還在使用這種清楚浮動的方法。有興趣的同學可以上他們首頁搜索一下他們的.blank0這個樣式名稱。

       

      因此有很多大神就研究出了 clearfix 清除浮動的方法,直接解決了上面的缺陷,不需要增加空標簽,直接在有浮動的外層加上這個樣式就可以了,這也是我們今天要討論的clearfix進化史。

      起源

      
      
      1. .clearfix:after { 
      2.     visibilityhidden
      3.     displayblock
      4.     font-size0
      5.     content" "
      6.     clearboth
      7.     height0
      8. .clearfix { displayinline-table; } 
      9.  
      10. * html .clearfix { height1%; }//Hides from IE-mac 
      11. .clearfix { displayblock; }//End hide from IE-mac 

       

      解釋一下以上的代碼:
      • 對大多數符合標準的瀏覽器應用第一個聲明塊,目的是創建一個隱形的內容為空的塊來為目標元素清除浮動。
      • 第二條為clearfix應用 inline-table 顯示屬性,僅僅針對IE/Mac。利用 * 對 IE/Mac 隱藏一些規則:
      • height:1% 用來觸發 IE6 下的haslayout。
      • 重新對 IE/Mac 外的IE應用 block 顯示屬性。

      • 最后一行用于結束針對 IE/Mac 的hack。(是不是覺得很坑爹,Mac下還有IE)

       

      起源代碼可能也是很早期的時候了,再往后Mac下的IE5也發展到IE6了,各種瀏覽器開始向W3C這條標準慢慢靠齊了。所以就有了下面這個寫法出現了。

      
      
      1. .clearfix:after { 
      2.     visibilityhidden
      3.     displayblock
      4.     font-size0
      5.     content" "
      6.     clearboth
      7.     height0
      8. * html .clearfix { zoom: 1; } /* IE6 */ 
      9. *:first-child+html .clearfix { zoom: 1; } /* IE7 */ 

       

      IE6 和 IE7 都不支持 :after 這個偽類,因此需要后面兩條來觸發IE6/7的haslayout,以清除浮動。幸運的是IE8支持 :after 偽類。因此只需要針對IE6/7的hack了。

      在一個有float 屬性元素的外層增加一個擁有clearfix屬性的div包裹,可以保證外部div的height,即清除"浮動元素脫離了文檔流,包圍圖片和文本的 div 不占據空間"的問題。

      clearfix浮動


      構成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就會閉合內部元素的浮動。 
       
      后面又有人對此進行了改良:

      Jeff Starr 在這里針對IE6/7用了兩條語句來觸發haslayout。我在想作者為什么不直接用 * 來直接對 IE6/7 同時應用 zoom:1 或者直接就寫成:
      
      
      1. .clearfix:after { 
      2.     visibilityhidden
      3.     displayblock
      4.     font-size0
      5.     content" "
      6.     clearboth
      7.     height0
      8. .clearfix{*zoom:1;} 

       

      但是對于很多同學這種優化程度代碼還是不夠給力,clearfix 發展到現在的兩個終極版。

      終極版一:

      1. .clearfix:after { 
      2.     content:"\200B"
      3.     display:block
      4.     height:0
      5.     clear:both
      6. .clearfix {*zoom:1;}/*IE/7/6*/ 
      7.  
      解釋下:content:"\200B";這個參數,Unicode字符里有一個“零寬度空格”,即 U+200B,代替原來的“.”,可以縮減代碼量。而且不再使用visibility:hidden。

      終極版二:

      
      
      1. .clearfix:before,.clearfix:after{ 
      2.     content:""
      3.     display:table; 
      4. .clearfix:after{clear:both;} 
      5. .clearfix{ 
      6.     *zoom:1;/*IE/7/6*/ 

       

      這兩個終極版代碼都很簡潔,終極版一和二都可以使用,以上代碼都經過測試,大家趕緊用一下吧,如果有什么問題請及時跟我反饋,如果你還停留在clearfix的老代碼的時候就趕緊更新一下代碼吧。

      http://www.randomwithlife.com/ true clearfix清除浮動進化史 http://www.randomwithlife.com/show-10-192-1.html report <?php echo strlen($content) / 2; ?> 我想大家在寫CSS的時候應該都對清除浮動的用法深有體會,今天我們就還討論下clearfix的進化史吧。首先在很多很多年以前我們常用的清除浮動是這樣的。 clear{clear:both;line-height:0;}現在可能還可以在很多老的
      TAG:clearfix 進化史
      本站歡迎任何形式的轉載,但請務必注明出處,尊重他人勞動成果
      轉載請注明: 文章轉載自:愛思資源網 http://www.randomwithlife.com/show-10-192-1.html

      [前端插件推薦] Plugin

      1 2 3 4
      • jQuery實現逐字逐句顯示插件l-by-l.min.js
      • jQuery帶方向感知的鼠標滑過圖片邊框特效插件
      • jQuery HotKeys監聽鍵盤按下事件keydown插件
      • 響應式無限輪播jQuery旋轉木馬插件
      響應式無限輪播jQuery旋轉木馬插件
      web前端開發
      愛思資源網 Copyright 2012-2014 www.randomwithlife.com All rights reserved.(晉ICP備13001436號-1)
      欧美精品久久久久久久自慰

      <noframes id="5hjpd"><progress id="5hjpd"><form id="5hjpd"></form></progress>

        <noframes id="5hjpd">

        <span id="5hjpd"><progress id="5hjpd"><progress id="5hjpd"></progress></progress></span>
          <noframes id="5hjpd">
          <ins id="5hjpd"><sub id="5hjpd"><rp id="5hjpd"></rp></sub></ins>
          <del id="5hjpd"><big id="5hjpd"></big></del>
          <track id="5hjpd"></track>