<!--[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裡條件性注釋的替代效果,各有各的使用場景,我們根據軟體的運行環境來選擇使用哪一種。