|
|
|
|
|
每次設(shè)計一張網(wǎng)頁或一個表單,都被各種瀏覽器的兼容問題傷透腦筋,尤其是IE家族。在做兼容性設(shè)計時,我們往往會使用各種瀏覽器能識別的獨特語法進行hack,從而達到各種瀏覽器下顯示正常的目的。其中,我們用得最多莫屬于\9和\0了。\9和\0是hack IE8、IE9、IE11的獨特標識。但是問題來了,\9和\0到底怎樣hack IE8、IE9、IE11這三個瀏覽器?這個問題一直困擾我很久,不過,今天我終于搞明白了,也獨創(chuàng)了一個能hack IE8、IE9、IE11這三個瀏覽器的代碼寫法模式,本文將與各位分享。
可能很多人都略明白,\0是用來hack IE8、IE9、IE11的,而\9是用來hack IE9的。但有時你真正運用起來,它并不湊效。看下面的html代碼:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#0000FF\0; /* 藍色 */
background-color:#FFFF00\9; /* 黃色 */
}
</style>
</head>
<body>
<div class="content">IE8 IE9 IE11均顯示黃色</div>
</body>
</html>
上例中,\9和\0就達不到hack 各IE瀏覽器版本的目的。不過我們把 /* 藍色 */ 和 /* 黃色 */ 這兩行調(diào)換,又會怎樣顯示呢?請看html代碼:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#FFFF00\9; /* 黃色 */
background-color:#0000FF\0; /* 藍色 */
}
</style>
</head>
<body>
<div class="content">IE11顯示黃色,IE8 IE9 均顯示藍色</div>
</body>
</html>
結(jié)果是,IE11顯示黃色,而IE8和IE9均顯示藍色。
上述兩個例子說明,IE8、IE9都能讀懂\9和\0標識,此兩標識哪個寫在后面就以哪個為準,而IE11僅能讀懂\9標識。
至此,我們能否根據(jù)上述結(jié)論來寫代碼來hack IE8、IE9和IE11三個瀏覽器?顯然是不可以的,至少你不可以hackIE8和IE9,僅能hackIE11。
那么,我們?nèi)绾稳ack IE8和IE9呢?這個就是問題的關(guān)鍵。
在此文 css區(qū)分ie8/ie9/ie10/ie11 chrome firefox的代碼 中提到,IE9以上瀏覽器可以讀懂此代碼:
/* IE9+ */
@media all and (min-width:0) {
.divContent{
background-color:#eee;
}
}
我們用此代碼結(jié)合前面的代碼,是不是就可以hack IE8和IE11了?完整html代碼如下:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#FFFF00\9; /* 黃色 */
background-color:#0000FF\0; /* 藍色 */
}
/* IE9+ */
@media all and (min-width:0) {
.content{
background-color:#000; /* 黑色 */
}
}
</style>
</head>
<body>
<div class="content">IE11顯示黃色,IE8 顯示藍色,IE9顯示黑色。</div>
</body>
</html>
至此,IE8、IE9、IE11的兼容性問題就解決了。
不過,還沒玩,因為 @media all and (min-width:0) 在 Chrome、Firefox、360等瀏覽器同樣有效。所以,上面代碼需要稍微修改下,在 @media all and (min-width:0) {} 里面的css語句同樣加上\0標識,表示這是屬于IE9的樣式。修改后的完整代碼如下:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#FFFF00\9; /* 黃色 */
background-color:#0000FF\0; /* 藍色 */
}
/* IE9+ */
@media all and (min-width:0) {
.content{
background-color:#000\0; /* 黑色 */
}
}
</style>
</head>
<body>
<div class="content">IE11顯示黃色,IE8 顯示藍色,IE9顯示黑色。</div>
</body>
</html>
至此,IE8、IE9、IE11的兼容性問題就完美解決了。
但是,如果網(wǎng)頁HTML代碼里聲明了Meta元件 IE=Edge,那么上面的代碼是不對的。
先看第一個html代碼:
<!DOCTYPE html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#0000FF\0; /* 藍色 */
background-color:#FFFF00\9; /* 黃色 */
}
</style>
</head>
<body>
<div class="content">IE11顯示藍色,IE8 IE9均顯示黃色</div>
</body>
</html>
結(jié)果是,IE11顯示藍色,IE8 IE9均顯示黃色,并非三個瀏覽器都顯示黃色了。
這就說明,加了meta IE=Edge 這句,IE11不再能讀\9這個標識。
我們再看如下代碼:
<!DOCTYPE html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#FFFF00\9; /* 黃色 */
background-color:#0000FF\0; /* 藍色 */
}
</style>
</head>
<body>
<div class="content">IE8 IE9 IE11 均顯示藍色</div>
</body>
</html>
結(jié)果是,IE8 IE9 IE11 均顯示藍色,這說明了,IE8 IE9 IE11 均能讀懂\0這個標識。
結(jié)合上面兩個例子,可以得出結(jié)論,加了meta IE=Edge 屬性后,IE8 IE9能同時讀懂\9和\0這兩個標識,而IE11僅能讀懂\0這個標識。
所以,我們可以據(jù)此來hack出IE11。如下html代碼加以說明:
<!DOCTYPE html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#0000FF\0; /* 藍色 這個是給IE11的 */
background-color:#FFFF00\9; /* 黃色 這個是給IE8和IE9的 */
}
</style>
</head>
<body>
<div class="content">IE11顯示藍色,IE8 IE9均顯示黃色</div>
</body>
</html>
這樣,我們再用上面的代碼hack出IE8和IE9就可以了。
如何hack IE8和IE9 ?還是前面那個hack IE8 IE9的關(guān)鍵代碼:
@media all and (min-width:0) {}
完整html代碼這樣寫:
<!DOCTYPE html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>hack IE8/IE9/IE11_css實例_卡卡網(wǎng) webkaka.com</title>
<style type="text/css">
.content{
width:400px;height:50px;color:#ccc;
background-color:#FF0000; /* 紅色 */
background-color:#0000FF\0; /* 藍色 這個是給IE11的 */
background-color:#FFFF00\9; /* 黃色 這個是給IE8和IE9的 */
}
/* IE9+ */
@media all and (min-width:0) {
.content{
background-color:#000\9; /* 黑色 這個是給IE9的 */
}
}
</style>
</head>
<body>
<div class="content">IE11顯示藍色,IE8顯示黃色,IE9顯示黑色</div>
</body>
</html>
特別注意,@media all and (min-width:0) {} 里面的樣式要加上 \9 ,表明這是給IE9的,不然Chrome和Firefox、360等瀏覽器都可以讀,并且本例meta聲明了IE=Edge屬性的IE11也能讀了。
對于如何hack IE8 IE9 IE11的問題,本文已經(jīng)給出了完美的解決方案。必須認識兩點,就是是否在meta聲明了IE=Edge屬性,這對hack的代碼寫法有巨大區(qū)別,\9和\0的用法也唯妙唯俏。