1. 程式人生 > >IE瀏覽器相容☞css hack

IE瀏覽器相容☞css hack

       ie瀏覽器的相容問題,各位前端的小夥伴肯定有不少,頭疼的記憶;目前w3c標準,對html5,css3都已經標準化,各大瀏覽器廠商也都對瀏覽器進行了升級改造;但是在某些行業,如國企,銀行,等一些傳統企業,依然再用IE8甚至更老的版本瀏覽器,而且還要必須支援IE8,這裡css3什麼的就別想了,就連一些常用的css都區別於其他瀏覽器。這裡就需要對IE進行相容,這裡就需要提到css hack 了。

1.條件hack

語法:

<!--[if <keywords>? IE <version>?]>

HTML程式碼塊

<![endif]-->

屬性值:

<keywords>

if條件共包含6種選擇方式:是否、大於、大於或等於、小於、小於或等於、非指定版本

是否:

指定是否IE或IE某個版本。關鍵字:

大於:

選擇大於指定版本的IE版本。關鍵字:gt(greater than)

大於或等於:

選擇大於或等於指定版本的IE版本。關鍵字:gte(greater than or equal)

小於:

選擇小於指定版本的IE版本。關鍵字:lt(less than)

小於或等於:

選擇小於或等於指定版本的IE版本。關鍵字:lte(less than or equal)

非指定版本:

選擇除指定版本外的所有IE版本。關鍵字:!

<version>

目前的常用IE版本為6.0及以上,推薦酌情忽略低版本,把精力花在為使用高階瀏覽器的使用者提供更好的體驗上

IE10及以上版本已將條件註釋特性移除,使用時需注意。

舉個例子:

<!--[if lt IE 8]>
<style>
.test{color:red;}
</style>
<![endif]-->

**小於IE8的瀏覽器顯示這個樣式
  • if條件Hack是HTML級別的(包含但不僅是CSS的Hack,可以選擇任何HTML程式碼塊)
  • 如不想在非IE中看到某區域,可這樣寫:
  • <!--[if IE]>
    <p>你在非IE中將看不到我的身影</p>
    <![endif]-->

    上述p程式碼塊,將只在IE中可見。

2.屬性級hack

_:選擇IE6及以下。連線線(中劃線)(-)亦可使用,為了避免與某些帶中劃線的屬性混淆,所以使用下劃線(_)更為合適。

*:選擇IE7及以下。諸如:(+)與(#)之類的均可使用,不過業界對(*)的認知度更高

\9:選擇IE6+

\0:選擇IE8+和Opera15以下的瀏覽器

舉個例子:如想同一段文字在IE6,7,8顯示為不同顏色,可這樣寫:

<style>
h1 {
	margin: 10px 0;
	font-size: 16px;
}
.test {
	color: #c30;          /* For latest Firefox, chrome, Safari */
	color: #090\0;        /* For Opera15- */
	color: #00f\9;        /* For IE8+ */
	*color: #f00;         /* For IE7 */
	_color: #ff0;         /* For IE6 */
}
</style>

3.選擇符級hack

舉例如下:

* html .test { color: #090; }       /* For IE6 and earlier */
* + html .test { color: #ff0; }     /* For IE7 */
.test:lang(zh-cmn-Hans) { color: #f00; }  /* For IE8+ and not IE */
.test:nth-child(1) { color: #0ff; } /* For IE9+ and not IE */

/* 上述程式碼中的3,4兩行就是典型的利用能力來進行選擇的CSS Hack。*/

注意事項:

選擇不同的瀏覽器及版本

  • 儘可能減少對CSS Hack的使用。Hack有風險,使用需謹慎
  • 通常如未作特別說明,本文件所有的程式碼和示例的預設執行環境都為標準模式。
  • 一些CSS Hack由於瀏覽器存在交叉認識,所以需要通過層層覆蓋的方式來實現對不同瀏覽器進行Hack的。