1. 程式人生 > >CSS之使用clearfix清除浮動

CSS之使用clearfix清除浮動

block一般一個塊佔一行,除非float
inline是自動排為一行,就象段內的文字一樣,可成為多行。

clear:both
語法:clear : none | left |right | both 
none :  允許兩邊都可以有浮動物件
both :  不允許有浮動物件
left :  不允許左邊有浮動物件
right :  不允許右邊有浮動物件
說明:該屬性的值指出了不允許有浮動物件的邊。請參閱float屬性。

!important 具有優先權,提升指定樣式規則的應用優先權。
示例:div { color:red!important }

display:inline|block
display:inline比較經典的用法是用在 <ul> 下的 <li> 中
display:inline 對應不顯示為 display:none
display:block 對應不顯示為 hidden
 說通俗點樣式為none的元素不佔位置,而樣式為hidden的元素雖然不顯示但還是佔地方

1.傳統處理方式:   
li {float:left;}/*這樣,對固定寬度導航條來說,li不能自動居中*/

2.inline-block方式:
ul {text-align:center;font-family:simsun;font-size:14px;}
li {display:inline-block;*display:inline;zoom:1;margin-right:-0.5em;
 *margin-right:0;}
a{display:block;}
/*行內顯示並且水平居中;
display:inline;zoom:1;是對ie的hack,
margin-right:0.5em是對現代瀏覽器去縫
*/


瀏覽器FireFox,Chrome下,li之間有縫隙,Google得知縫隙由字型大小產生,所以另外加入hack來除縫
關於zoom:1;的作用,可以看下幫助文件,地址:http://www.yesky.com/imagesnew/software/css/css2/c_zoom.html
而這兩種實現方法中,float:left要比display:inline;的表現方式要好。因為內聯(display:inline;)

屬於行佈局,其特性是在一行裡進行佈局,所以不能被設定寬高。塊級元素的佈局相對於內聯樣式要精
確的多。所以儘量使用float:left;
當我們使用float:left後,發現父級元素的div沒有被撐開了. 通常情況下要清理浮動.這也是我們公司現在所使用的方法. 如

<div>
      <ul style="float:left">
           <li><a href="#">1</a></li>
           <li><a href="#">2</a></li>
           <li><a href="#">3</a></li>
      </ul>
       <!--需要清理浮動-->
       <div style="clear:both"></div>
</div>

 用了很久這樣的方法,每次寫Repeater繫結的時候都要加個<div style="clear:both"></div>的標籤,以
前沒有注意到這方面的東西.今天重新寫樣式的時候,就上網搜了下替代的方法.果然在Google中搜到了一
篇How To Clear Floats Without Structural Markup的文章,靈活的處理了清空浮動的問題
首先設定程式碼為:

.clearfix:after {
  content:".";
  display:block;
  height:0;
  clear:both;
  visibility:hidden;
}
這樣我們只要對父級div引入這個clearfix的類即可,即

<div class="clearfix" >
      <ul style="float:left">
           <li><a href="#">1</a></li>
           <li><a href="#">2</a></li>
           <li><a href="#">3</a></li>
      </ul>
</div>

 這個css的原理是經過使用after偽物件,它將在應用clearfix的元素結尾新增content中的內容,也就是一
個".",並且把他設定為塊級元素(display="block");高度設定為0,clear="both",然後將其內容隱藏掉
(visibility="hidden").這樣就會撐開此塊級元素.
但是,IE並不支援.所以如果你需要相容IE瀏覽器的話,可以設定以個Hack.

 .clearfix:after {
    content:".";
    display:block;
    height:0;
    clear:both;
    visibility:hidden;
}
 
* html .clearfix {zoom:1;}
這樣我們就可以只在父級div引用class類解決了繁瑣的清空步驟.
下面給出別的網站清空浮動的程式碼:
/* 豆瓣的clear both方式 */
.clearfix:after {
content: “.”;
display:block;
height:0;
clear:both;
visibility:hidden
}
.clearfix {
zoom: 1;
display: inline-block;
_height: 1px
}
*html .clearfix { height: 1% }
*+html .clearfix { height: 1% }
.clearfix { display: block }

CSS hack 用來讓網頁相容各種瀏覽器(在各種環境下都能“正確的”顯示)
*+html 與 *html 是IE特有的標籤, firefox 暫不支援.而*+html又為IE7特有標籤.

/*蝦米的方式*/
.clearfix:after{
content:”.”;
display:block;
height:0;
clear:both;
visibility:hidden;
}

直接copy下bootstrap裡面的clearfix寫法:
    .clearfix {
      *zoom: 1;
    }

    .clearfix:before, .clearfix:after {
      display: table;
      line-height: 0;
      content: "";
    }

.clearfix:after {
  clear: both;
}

.clearfix{zoom:1;}

在一個有float 屬性元素的外層增加一個擁有clearfix屬性的div包裹,可以保證外部div的height,即
清除"浮動元素脫離了文件流,包圍圖片和文字的 div 不佔據空間"的問題。
看到”閒聊CSS之關於clearfix–清除浮動“ (http://www.indievox.com/e2ghost/post/50238)的文章給
了一個比較清晰的分析:

構成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就會閉合內部元素的浮動。

這就是為什麼選擇display:table的原因。

firefox不支援float:right

<button class="vjs-fullscreen-control vjs-control vjs-button" 
type="button" aria-live="polite" title="Fullscreen" 
aria-disabled="false"></button>
<div class="vjs-volume-menu-button vjs-menu-button 
vjs-menu-button-inline vjs-control vjs-button  
vjs-volume-menu-button-horizontal vjs-vol-3" 
title="Mute" aria-disabled="false"></div>
/********replace float:right********************/
.vjs-default-skin .vjs-volume-menu-button{
  position:absolute;
  right:0;
  top:0;
  margin-right: 4em;
}

.vjs-default-skin .vjs-fullscreen-control{
  position:absolute;
  right:0;
  top:0;
}

/*.vjs-default-skin .vjs-volume-menu-button{
  float:right;
  margin-right: 4em;
}

.vjs-default-skin .vjs-fullscreen-control{
  float:right;
}*/
/*******replace float:right*********************/

相關推薦

CSS關於clearfix--清除浮動

一,什麼是.clearfix 你只要到Google或者Baidu隨便一搜"css清除浮動",就會發現很多網站都講到"盒子清除內部浮動時可以用到.clearfix"。 .clearfix:after { content:" "; display: block;

CSS使用clearfix清除浮動

block一般一個塊佔一行,除非floatinline是自動排為一行,就象段內的文字一樣,可成為多行。clear:both語法:clear : none | left |right | both  none :  允許兩邊都可以有浮動物件both :  不允許有浮動物件left :  不允許左邊有浮動物件r

CSS clearfix 清除浮動 用法詳解

   一.為什使用        首先,我們來解釋一下為什麼要使用 clearfix(清除浮動)。 通常我們在寫html+css的時候,如果一個父級元素內部的子元素是浮動的(float),那麼常會發生父元素不能被子元素正常撐開的情況,如下圖所示:               

clearfix清除浮動閉合容器:after與:before

首先對偽類:before與:after做下注腳 :before 偽元素在元素之前新增內容。 :after 偽元素在元素之後新增內容。 這2個偽元素允許創作人員在元素內容的 最前面/最後面 插入生成內容。預設地,這個偽元素是行內元素,不過可以使用屬性 display

CSS2. 清除浮動,什麼時候需要清除浮動清除浮動都有哪些方法

2. 清除浮動,什麼時候需要清除浮動,清除浮動都有哪些方法 ? 一.什麼時候需要清除浮動? 我們對元素進行了浮動(float)時,我們的元素就會脫離文件流,像一隻小船一樣漂流在文件之上。 在 CSS 中,任何元素都可以浮動。浮動元素會生成一個塊級框,而

【筆記】學習CSS佈局11——清除浮動(chearfix hack)

在使用浮動的時候經常會遇到一個古怪的事情: <!DOCTYPE html> <html> <head> <title></title> <style type="text/css"> .clearfix { b

clearfix清除浮動的幾種方法

clearfix清除浮動1..clear{clear:both;line-height:0;}缺點:頁面複雜的佈局的話會產生很多空標籤2..clearfix:after{visibility:hidden;display:block;font-size:0;content:

clearfix清除浮動方案

long long ago,在剛進入前端這個領域的時候,很多東西都不知道,清除浮動用的是 overflow:hidden … 過了段時間,看別人的原始碼,發現class類中都有個clearfix,於是

css子元素浮動導致父元素高度塌陷解決方案

問題引入:在製作導航欄時,若父元素ul不給出高度的具體數值,只給背景。而子元素li又用到了float:left。 那麼,這種情況就會導致父元素的背景“消失”,因為浮動元素脫離文件流,不佔據空間,因此相當於父列表沒有內容。 解決方案: 一:新增進行清理浮動的元素(但書中說,這

clearfix清除浮動最佳實踐

版本一 .clearfix:after { content:"\200B"; display:block; height:0; clear:both; } 解

CSS布局模型 浮動模型(浮動的工作原理和清除浮動技巧?)

浮動 浮動模型 工作原理 浮動的工作原理浮動是讓某元素脫離文檔流,在浮動框之前和之後的非定位元素會當它不存在一樣,可能沿著它的另一側垂直流動,但都為其騰出空間,塊級元素也不例外(被浮動元素占據了部分行空間的塊級元素,仍然被看作是占據了一整行,只不過是被浮動元素占據的那部分空間無法利用罷了)。浮動的

CSS響應式佈局清除浮動

在很多前端工程師日常工作中,在使用到float佈局時,總會有一點需要去考慮的,那就是清除浮動問題。 那這個問題怎麼會發生的呢? 當float子元素高度超出父級元素高度時,父級元素高度塌縮,因為float元素脫離文件流,其佈局不受父元素控制 這個情況如下圖所示 高度塌

css 清除浮動 clearfix

在學習做一個顯示圖片的網頁的時候,使用的方法是一個div父框架,包含幾個子div,佈局需要,子div全部設定成了左浮動,然後在通過瀏覽器看父div的高度一直是0,然後看一個教程說是這種情況下需要清除浮動,用的clearfix方法,當時不太理解這個方法,然後查了資

css清除浮動clearfix:after的用法詳解(轉)

三種方式 用法 html 解決 解決方法 閱讀 inline 轉移 entry css清除浮動clearfix:after的用法詳解 2015-12-10 23:11 by 流浪的詩人, 8099 閱讀, 0 評論, 收藏, 編輯 如果外部有一個div容器,其內部d

css清除浮動主要方法

清除浮動 自動 div標簽 ont 模型 display zoom wid bili 1、浮動元素尾部添加空div標簽,設置css為clear:both; 缺點:如果頁面浮動布局多,則需要添加較多div; 2、父級元素定義偽類:after和zoom:1; .fathe

CSS清除浮動方法

pla 處理 adding ges 元素 高度 height css pre HTML結構 1 <div class="wrap"> 2 <div class="div1">1</div> 3 <div clas

【Web前端】清除浮動&amp;css中文字體

white hidden lag iso 學習資源 target 元素 關系 align 清理浮動有非常多種方式,像使用 br 標簽自帶的 clear 屬,使用元素的 overflow。使用空標簽來設置 clear:both 等等。但考慮到兼容問題和語義化

css清除浮動清除子節點margin溢出問題

cnblogs for size flow bsp eight before 16px :after 清除浮動 .clearfix:after{          content:”.”;          display:block;          height:0

css浮動

給定 round logs 比較 方向 char generator 文檔流 區別 浮動就是使元素脫離文檔流,按照指定的方向進行一個移動,遇到父元素邊界或者相鄰的浮動元素時,浮動元素會停下來。 脫離文檔流通俗的說就是在頁面中不占位置。 浮動有兩個值:float:left /

css 清除浮動的方法

意義 spa gin size 內部 是我 foo 插入 float 不添加清除浮動的時候:這裏我沒有給最外層的DIV.outer 設置高度,但是我們知道如果它裏面的元素不浮動的話,那麽這個外層的高是會自動被撐開的。但是當內層元素浮動後,就出現了一下影響:(1):背景不能顯