不一樣的瀏覽器,好比Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,對CSS的解析不同,所以會致使生成的頁面效果不同,得不到咱們所須要的頁面效果。css
爲了解決瀏覽器兼容性,咱們就須要針對不一樣的瀏覽器去寫不一樣的CSS,讓它可以同時兼容不一樣的瀏覽器,能在不一樣的瀏覽器中也能獲得咱們想要的頁面效果。這個針對不一樣的瀏覽器寫不一樣的CSS code的過程,就叫CSS hack,也叫寫CSS hack。html
因爲不一樣的瀏覽器對CSS的支持及解析結果不同,還因爲CSS中的優先級的關係。咱們就能夠根據這個來針對不一樣的瀏覽器來寫不一樣的CSS。express
好比 IE6能識別下劃線"_"和星號" * ",IE7能識別星號" * ",但不能識別下劃線"_",而firefox兩個都不能認識。等等瀏覽器
書寫順序,通常是將識別能力強的瀏覽器的CSS寫在後面。下面列舉經常使用的CSS hack方法app
CSS書寫技巧-1:!importantide
!important做用是提升指定樣式規則的應用優先權。 IE7以及全部標準瀏覽器能識別!important 區別IE6與IE7與其餘瀏覽器firefox
.browserTest { border:20pxsolid#60A179!important; border:20pxsolid#00F; }設計
在Mozilla中或者IE7瀏覽時候,可以理解!important的優先級,所以顯示#60A179的顏色。在IE6中瀏覽時候,不可以理解!important的優先級,所以顯示#00F的顏色。code
CSS書寫技巧-2:*htm
IE都能識別*;標準瀏覽器(如火狐)不能識別*。區別IE6與火狐
.browserTest { border:20pxsolid#60A179; *border:20pxsolid#00F; } 區別IE7與火狐
.browserTest { border:20pxsolid#60A179; *border:20pxsolid#00F; } 區別IE7,IE6與火狐
.browserTest { border:20pxsolid#60A179; *border:20pxsolid#00F!important; *border:20pxsolid###; }
CSS書寫技巧-3:_
IE6支持下劃線,IE7和firefox均不支持下劃線
區別IE7,IE6與火狐
.browserTest { border:20pxsolid#60A179; *border:20pxsolid#00F; _border:20pxsolid###; } 不論是什麼方法,書寫的順序都是firefox的寫在前面,IE7的寫在中間,IE6的寫在最後面
CSS書寫技巧-4:*+html 與 *html
*+html 與 *html 是IE特有的標籤, firefox 暫不支持.而*+html 又爲 IE7特有標籤
.browserTest{width:120px;}/*FireFoxfixed*/ *html.browserTest{width:80px;}/*ie6fixed*/ *+html.browserTest{width:60px;}/*ie7fixed*/ 注意:
*+html 對IE7的HACK 必須保證HTML頂部有以下聲明:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
如下是一些經常使用的CSS兼容技巧
1)火狐下給div設置padding後會致使width和height 增長, 但IE不會.(可用!important解決)
2)垂直居中,將 line-height設置爲當前div相同的高度, 再經過vertical-align: middle;( 注意內容不要換行)
3)水平居中,margin:0 auto;(固然不是萬能)
4)若需給a標籤內內容加上樣式, 須要設置 display: block;(常見於導航標籤)
5)浮動IE產生的雙倍距離
在IE下,當一個div設置了float後,而後給他設置margin,就會出現加倍的margin,解決的辦法是給div設置display:inline。 <divid=」float」></div> 相應的css爲 #float { float:left; margin:5px;/*IE下理解爲10px*/ display:inline;/*IE下再理解爲5px*/ } Block元素的特色是:老是在新行上開始,高度,寬度,行高,邊距均可以控制(塊素);inline元素的特色是:和其餘元素在同一行上,...不可控制(內嵌元素);
6)IE和FF對盒模型的解釋區別
#browserTest{width:650px!important;width:648px;padding-left:2px;background:#fff;} browserTest顯示的寬度是650px;
IE Box的總寬度是:width+padding+border+margin寬度總和;
FF Box的總寬度就是:width的寬度,padding+border+margin的寬度在含在width內。
若是有box{width:"300px"; padding:"5px";}
則box在IE的寬度應該爲:310px;而在FF的寬度則是300px;因此在box有填充的狀況下應該這樣使用box{width:"300px" !important;width:"290px";}
7)ul標籤在FF下面默認有list-style和padding, 最好事先聲明, 以免沒必要要的麻煩;(常見於導航標籤和內容列表)
8)做爲外部wrapper的div不要定死高度, 最好還加上 overflow: hidden;以達到高度自適應;
9)頁面的最小寬度min-width是個很是方便的CSS命令,它能夠指定元素最小也不能小於某個寬度,這樣就能保證排版一直正確。但IE不認得這個, 而它實際上把width當作最小寬度來使。爲了讓這一命令在IE上也能用,能夠把一個<div> 放到 <body> 標籤下,而後爲div指定一個類:
而後CSS這樣設計:
#container{min-width:600px;width:expression(document.body.clientWidth<600?"600px":"auto");} 第一個min-width是正常的;但第2行的width使用了Javascript,這隻有IE才認得,這也會讓你的HTML文檔不太正規。它實際上經過Javascript的判斷來實現最小寬度。
CSS書寫技巧-10:萬能float閉合
將如下代碼加入Global CSS 中,給須要閉合的div加上
<style>
/*ClearFix*/
.clearfix:after { content:"."; display:block; height:0; clear:both; visibility:hidden; }
*html.clearfix{ height:1%; }
*+html.clearfix{ height:1%; }
.clearfix { display:inline-block; }
/*HidefromIEMac*/
.clearfix{display:block;} /*EndhidefromIEMac*/ /*endofclearfix*/
#wrap{border:6px #ccc solid;overflow:auto;_height:1%;}
.column_left{float:left;width:20%;padding:10px;}
.column_right{float:right;width:75%;padding:10px;border-left:6px #eee solid;}
</style>
<div id="wrap">
<div class="column_left"> <h1>Floatleft</h1> </div>
<div class="column_right"> <h1>Floatright</h1> </div>
</div>