CSS

css判斷ie版本方法, 通過媒體查詢引用樣式或css文档

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: CSDN 2023-09-12 我要說兩句(0)

不借助後耑的情況下純前耑實現不同瀏覽器渲染不同樣式的玩法。

<!--[if !IE]><!--> 除IE外都可識別 <!--<![endif]-->
<!--[if IE]> 所有的IE可識別 <![endif]-->
<!--[if IE 6]> 僅IE6可識別 <![endif]-->
<!--[if lt IE 6]> IE6以下版本可識別 <![endif]-->
<!--[if lte IE 6]> IE6以及IE6以下版本可識別 <![endif]-->
<!--[if gte IE 6]> IE6以及IE6以上版本可識別 <![endif]-->
<!--[if IE 7]> 僅IE7可識別 <![endif]-->
<!--[if lt IE 7]> IE7以下版本可識別 <![endif]-->
<!--[if gte IE 7]> IE7以及IE7以上版本可識別 <![endif]-->
<!--[if IE 8]> 僅IE8可識別 <![endif]-->
<!--[if IE 9]> 僅IE9可識別 <![endif]-->

如:

<!--[if IE 9]>
<link rel="stylesheet" type="text/css" href="ie9.css"/>
<![endif]-->
或
<!--[if IE 9]>
<style>
.header-menu>li{
color:#fff;
}
</style>
<![endif]-->

IE10/11不支持條件性注釋後的替代方法

專門針對IE的條件性注釋(Conditional comments)是個很奇葩的東西,它是專門給IE瀏覽器準備的,因爲其它瀏覽器根本不能識別這種標記。之所以需要這種東西,是因爲IE實現的網頁渲染效果和其它瀏覽器又很多出入,使用條件性注釋可以區別對待的針對瀏覽器編寫CSS等代碼。

<!--[if IE]>
<link href="ie.css" rel="stylesheet">
<![endif]-->
<!--[if IE6]>
<style type="text/css">
/* styles for IE6 goes here */
</style>
<![endif]-->
<!--[if lt IE7]>
<style type="text/css">
/* styles for IE7 goes here */
</style>
<![endif]-->
<!--[if lte IE8]>
<style type="text/css">
/* styles for IE8 goes here */
</style>
<![endif]-->
<!--[if gt IE9]>
<style type="text/css">
/* styles for IE9 goes here */
</style>
<![endif]-->
<!--[if gte IE9]>
<style type="text/css">
/* styles for IE9 goes here */
</style>
<![endif]-->
<!--[if !IE]> -->
<style type="text/css">
/* styles goes here but should not appear in IE5-9 */
</style>
<!-- <![endif]-->

但當IE的版本到到達10/11後,開始不支持這種條件性注釋(MSDN上的說明)。

說來也合情合理,從IE9開始,IE開始被WEB開發人員接受,很多人將IE9後的瀏覽器和火狐、谷歌瀏覽器統稱爲現代瀏覽器,因爲它們開始實現新的HTML5和CSS3統一標準。但願望是美好的,現實卻是殘酷的,很多WEB開發人員在開發實踐中發現,同一個CSS在IE9/10/11上顯示的效果和其它瀏覽器渲染的效果還是不一樣。也就是說,我們還是需要條件性注釋。

那麽,在不支持條件性注釋的IE10/11上,如何實現條件性注釋的效果呢?

方法一:使用IE=EmulateIE9屬性指示瀏覽器採用IE9渲染技術

IE9是支持條件性注釋的。

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/>

在html網頁的head標簽裡加入上面的元標記,這樣IE10/11就能識別條件性注釋了,我們也就可以像IE6/7/8那樣編寫針對性的CSS代碼了。但這樣做有個弊耑,很顯然,瀏覽器這樣就會才能IE9的渲染模式,而不是最新的IE10/11技術。

方法二:使用媒體查詢語句+

-ms-high-contrast

屬性

CSS的媒體查詢語句(media query)是一種高級的CSS條件語句,它能根據一些屬性和屬性值計算判斷CSS是否可以生效。在這裡,我們要使用一個IE10/11獨有的屬性,它就是

-ms-high-contrast

,只有IE10/11實現了這個屬性,它可以有兩個值

active

none

,使用下面的媒體查詢語句:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
/* IE10+ CSS styles go here */
}

火狐瀏覽器、谷歌瀏覽器不能識別這個屬性,所以不會執行這個查詢語句裡的CSS,從而實現了條件性執行的效果。

方法三:使用Javascript判斷瀏覽器的類型

先用JavaSCript判斷是否是IE瀏覽器,如果是,就在頁面的<html>標簽裡添加一個“ie”的類名:

var ms_ie = false;
var ua = window.navigator.userAgent;
var old_ie = ua.indexOf('MSIE ');
var new_ie = ua.indexOf('Trident/');
    
if ((old_ie > -1) || (new_ie > -1)) {
    ms_ie = true;
}
    
if ( ms_ie ) {
   document.documentElement.className += " ie";
}

有了這個標志性css class後,我們就可以在CSS裡區別性的編寫css代碼了。

.testClass{
    /*這裡寫通用的css*/ 
}
.ie .testClass{
    /*這裡寫專門針對IE的css*/
}

這三種方法都能實現在IE10/11裡條件性注釋的替代效果,各有各的使用場景,我們根據軟體的運行環境來選擇使用哪一種。

閲完此文,您的感想如何?
  • 有用

    2

  • 沒用

    1

  • 開心

    1

  • 憤怒

    1

  • 可憐

    1

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • 多個高度相同, 屬性inline-block的div,有的div沒有内容而有的div有内容,有内容的會下沉?

  • 讓整個網頁全局變成黑白色調的css代碼

  • CSS生成内容

  • CSS3外輪廓屬性

我要說說
網上賓友點評