這個時候我們就需要針對不同的浏覽器去寫不同的CSS,讓它能夠同時兼容不同的浏覽器,能在不同的浏覽器中也能得到我們想要的頁面效果。這個針對不同的浏覽器寫不同的CSS code的過程,就叫CSS hack,也叫寫CSS hack。
由於不同的浏覽器對CSS的支持及解析結果不一樣,還由於CSS中的優先級的關系。我們就可以根據這個來針對不同的浏覽器來寫不同的CSS。
比如 IE6能識別下劃線"_"和星號" * ",IE7能識別星號" * ",但不能識別下劃線"_",而Firefox兩個都不能認識。等等
書寫順序,一般是將識別能力強的浏覽器的CSS寫在後面。下面列舉常用的CSS hack方法
CSS書寫技巧-1:!important
!important作用是提高指定樣式規則的應用優先權。
IE7以及所有標准浏覽器能識別!important
區別IE6與IE7與其他浏覽器
- .browserTest
- {
- border:20pxsolid#60A179!important;
- border:20pxsolid#00F;
- }
在Mozilla中或者IE7浏覽時候,能夠理解!important的優先級,因此顯示#60A179的顏色:
在IE6中浏覽時候,不能夠理解!important的優先級,因此顯示#00F的顏色:
CSS書寫技巧-2:*
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:"300"; PADDING:"5PX";}
則BOX在IE的寬度應該為:310
而在FF的寬度則是300
所以在BOX有填充的情況下應該這樣使用
BOX{WIDTH:"300" !IMPORTANT; WIDTH:"290";}
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*/
- </style>
- /**********************************************/
- <divid="wrap">
- <divclass="column_left">
- <h1>Floatleft</h1>
- </div>
- <divclass="column_right">
- <h1>Floatright</h1>
- </div>
- </div>
- #wrap{border:6px#cccsolid;overflow:auto;_height:1%;}
- .column_left{float:left;width:20%;padding:10px;}
- .column_right{float:right;width:75%;padding:10px;border-left:6px#eeesolid;}