處理瀏覽器兼容 各個瀏覽器的標識 hack


 

Firefox 瀏覽器

@-moz-document url-prefix() { 

  .selector {  

      property: value; 

    } 

支持所有Gecko內核的瀏覽器 (包括Firefox)

*>.selector { property: value; } 

Webkit 內核瀏覽器 

@media screen and (-webkit-min-device-pixel-ratio: 0) { 

 Selector { 

   property: value; 

  } 

Opera 瀏覽器

html:first-child>b\ody Selector {property:value;} 

IE 瀏覽器針對不同的版本有不同個Hack方式。

CSS Hack大致有3種表現形式,CSS類內部Hack、選擇器Hack以及HTML頭部引用(if IE)Hack,CSS Hack主要針對類內部Hack:比如 IE6能識別下划線"_"和星號" * ",IE7能識別星號" * ",但不能識別下划線"_",而firefox兩個都不能認識。等等

選擇器Hack:比如 IE6能識別*html .class{},IE7能識別*+html .class{}或者*:first-child+html .class{}。等等

方式一:HTML頭部引用(if IE)Hack:針對所有IE:<!--[if IE]><!--您的代碼--><![endif]-->,針對IE6及以下版本:<!--[if lt IE 7]><!--您的代碼--><![endif]-->,這類Hack不僅對CSS生效,對寫在判斷語句里面的所有代碼都會生效。

1. <!--[if !IE]> 除IE外都可識別 <!--<![endif]-->

2. <!--[if IE]> 所有的IE可識別 <![endif]-->

3. <!--[if IE 5.0]> 只有IE5.0可以識別 <![endif]-->

4. <!--[if IE 5]> 僅IE5.0與IE5.5可以識別 <![endif]-->

5. <!--[if gt IE 5.0]> IE5.0以及IE5.0以上版本都可以識別 <![endif]-->

6. <!--[if IE 6]> 僅IE6可識別 <![endif]-->

7. <!--[if lt IE 6]> IE6以及IE6以下版本可識別 <![endif]-->

8. <!--[if gte IE 6]> IE6以及IE6以上版本可識別 <![endif]-->

9. <!--[if IE 7]> 僅IE7可識別 <![endif]-->

10. <!--[if lt IE 7]> IE7以及IE7以下版本可識別 <![endif]-->

11. <!--[if gte IE 7]> IE7以及IE7以上版本可識別<![endif]-->
 
        

 (2)方式二 類內屬性前綴法

    說明:在標准模式中
  • “-″減號是IE6專有的hack
  • “\9″ IE6/IE7/IE8/IE9/IE10都生效
  • “\0″ IE8/IE9/IE10都生效,是IE8/9/10的hack
  • “\9\0″ 只對IE9/IE10生效,是IE9/10的hack

(3)CSS hack方式三:選擇器前綴法

*html *前綴只對IE6生效
*+html *+前綴只對IE7生效
@media screen\9{...}只對IE6/7生效
@media \0screen {body { background: red; }}只對IE8有效
@media \0screen\,screen\9{body { background: blue; }}只對IE6/7/8有效
@media screen\0 {body { background: green; }} 只對IE8/9/10有效
@media screen and (min-width:0\0) {body { background: gray; }} 只對IE9/10有效
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} 只對IE10有效等等
 

IE 9   

:root Selector {property: value\9;} 

IE 9-

Selector {property: value\9;} 

IE 8    

Selector {property: value/;} 

或: 

@media \0screen { 

 Selector {property: value;} 

IE 8  +

Selector {property: value\0;} 

IE 7

+html Selector{property:value;} 

或: 

*:first-child+html Selector {property:value;} 

IE 7-

Selector {*property: value;} 

IE 6

Selector { 

 _property: value; 

或者: 

*html Selector { 

  property: value; 

 

例如:

div{
 background : green ; /*forfirefox*/
 * background : red ; /*forIE6*/ (bothIE 6 &&IE 7 )
}
比如要分辨IE6和firefox兩種瀏覽器,可以這樣寫:
 
我在IE6中看到是紅色的,在firefox中看到是綠色的。
解釋一下:
上面的css在firefox中,它是認識不了后面的那個帶星號的東西是什么的,於是將它過濾掉,不予理睬,解析得到的結果是:div{background:green},於是理所當然這個div的背景是綠色的。
在IE6中呢,它兩個background都能識別出來,它解析得到的結果是:div{background:green;*background:red;},於是根據優先級別,處在后面的red的優先級高,於是當然這個div的背景顏色就是紅色的了。
CSS hack:區分IE6,IE7,firefox
 
區別FF,IE7,IE6:
background:orange;*background:green;_background:blue;
background:orange;*background:green!important;*background:blue;
注:IE都能識別*;標准瀏覽器(如FF)不能識別*;
IE6能識別*;不能識別 !important;
IE7能識別*,能識別!important;
FF不能識別*,但能識別!important;
瀏覽器優先級別:FF<IE7<IE6,CSS hack書寫順序一般為FF IE7 IE6
以: " #demo {width:100px;} "為例;
#demo {width:100px;} /*被FIREFOX,IE6,IE7執行.*/
* html #demo {width:120px;} /*會被IE6執行,之前的定義會被后來的覆蓋,所以#demo的寬度在IE6就為120px; */
*+html #demo {width:130px;} /*會被IE7執行*/
所以最后,#demo的寬度在三個瀏覽器的解釋為: FIREFOX:100px; ie6:120px; ie7:130px;
IE8 最新css hack:
"\9" 例:"border:1px \9;".這里的"\9"可以區別所有IE和FireFox.(只針對IE9 Hack)
"\0" IE8識別,IE6、IE7不能.
"*" IE6、IE7可以識別.IE8、FireFox不能.
"_" IE6可以識別"_",IE7、IE8、FireFox不能.
 
 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM