10個(gè)技巧幫你搞定IE 6
發(fā)布時(shí)間:2011-04-26 11:36:16 作者:佚名
我要評(píng)論

雖然說IE8已經(jīng)來(lái)了,并且表現(xiàn)不錯(cuò)。8個(gè)小時(shí)突破1200W下載,遠(yuǎn)遠(yuǎn)地超過24小時(shí)下載800W的firefox。
但對(duì)于整個(gè)互聯(lián)網(wǎng),IE6仍然是用戶最多的瀏覽器。暫不說IE6怎樣,把Web的表現(xiàn)做得更好,既是一種責(zé)任,也是一種能力的表現(xiàn)。如果你依然對(duì)IE6所出現(xiàn)的種種問題無(wú)可奈何,就讓我?guī)銇?lái)看一下來(lái)自SitePoint的 10 Fixes That Solve IE6 Problems,學(xué)會(huì)這10個(gè)方法,你將可以解決大部分IE6出現(xiàn)的問題。

1. 使用 DOCTYPE
你需要在HTML頁(yè)面的最頂部加上DOCTYPE類型,當(dāng)然, strict版是值得推薦的,例如:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
或者, XHTML頁(yè)面的!DOCTYPE:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
你最不想看到的是,IE6進(jìn)入怪癖模式 – 其實(shí)已經(jīng)夠多怪癖了。
2. 設(shè)置position: relative
設(shè)置position:relative解決了不止一個(gè)問題,特別當(dāng)需要設(shè)置對(duì)齊的時(shí)候。很明顯,你需要明白的一點(diǎn)是,絕對(duì)定位是相對(duì)來(lái)說的。說不定,因?yàn)槟銢]有設(shè)置,而不知道東西都飛到那去了。比如,你設(shè)計(jì)了每篇文章前都有一張圖片,最后,你發(fā)現(xiàn),只有一張圖片在頁(yè)面上,或許,是他們重疊了。
3. 給浮動(dòng)元素設(shè)置 display:inline 值
這源于著名的IE6雙倍外邊距BUG,例如,你給一個(gè)DIV設(shè)計(jì)了浮動(dòng),并且,設(shè)置了margin-left:5px;,在IE6中很可能就是margin-left:10px了,這里,給浮動(dòng)元素設(shè)置 display:inline;,即可解決問題。
4. 為元素設(shè)置 hasLayout
很多IE6(或IE7)的問題可以用設(shè)置hasLayout值的方法來(lái)解決。(如果你不知道hasLayout是什么,請(qǐng)看這里)
最簡(jiǎn)單的給元素設(shè)置hasLayout值的方法是給加上CSS 的height或width(當(dāng)然,zoom也可以用,但這不是CSS的一部分)。設(shè)置一個(gè)具體的值是推薦的,但有時(shí)候并不一定知道高度多少,這里,你可能會(huì)用到height:1%。如果父元素沒有設(shè)置高度,那么元素的物理高度并不會(huì)改變,但是,已經(jīng)具備hasLayout屬性。
5. 解決字符重復(fù)出現(xiàn)的問題
復(fù)雜的布局可能導(dǎo)致一些浮動(dòng)元素里面的文字,出現(xiàn)在清理浮動(dòng)位置的下面。這是一個(gè)奇怪的問題,下面這此可以幫你解決:
確保浮動(dòng)元素設(shè)置了 display:inline;
在浮動(dòng)元素中使用 margin-right:-3px;
在浮動(dòng)元素的最后一個(gè)元素后加上一個(gè)IE注釋,例如: <!--[if !IE]>把你的注釋放這里… <![endif]-->
在最后的元素中加上一個(gè)DIV(這以設(shè)置width 為90% 或者其他相似的高度)
UPDATE: 最簡(jiǎn)單的方法是刪除掉所有注釋。(感謝恬瑋兒的提示,我自己并沒有遇到過,不過,google了一下,發(fā)現(xiàn)這個(gè)方法也可以解決,并且,這是值得推薦的一個(gè)方法。)
你可以到positioniseverything.net中查看更多關(guān)于這個(gè)的解釋。
6.只在<a>標(biāo)簽中使用hover,IE6只支持<a>標(biāo)簽顯示hover樣式
當(dāng)然,你還是可以通過JS來(lái)解決這個(gè)方法。但是, 這關(guān)于到可訪問性的問題。建議不要把重要的內(nèi)容設(shè)置在利用JS來(lái)實(shí)現(xiàn)的hover中。
7. 使用!important 或高級(jí)選擇器來(lái)區(qū)分IE瀏覽器
比如min-height可以避免使用CSS來(lái)實(shí)現(xiàn)對(duì)IE的兼容。
#element {
min-height: 20em;
height: auto !important;
height: 20em; /* 讓IE6顯示這個(gè)高度 */
}
IE6 并不能正確地識(shí)別min-height,可以設(shè)置固定的高度,讓IE6解析為20em。即使如此,它還是會(huì)因?yàn)閮?nèi)容的尺寸擴(kuò)大而改變高度。而另一個(gè)方法是使用高級(jí)選擇器:
#element {
min-height: 20em;
height: 20em;
}
/* 忽略 IE6 */
#element[id] {
height: auto;
}
8. 避免按比例確定的尺寸
比例會(huì)讓IE6變得錯(cuò)亂,除非你給父元素添加一個(gè)確切的高度。不然,給其他的加上!important,例如:
body{
margin: 2% 0 !important;
margin: 20px 0; /* IE6 可讀 */
}
9. 盡早測(cè)試,經(jīng)常測(cè)試
別忘記盡早測(cè)試,經(jīng)常測(cè)試, 除非你的程度已經(jīng)完成。不然,你可能花更多的時(shí)間來(lái)解決IE6的問題。一般情況下,如果你的網(wǎng)站能在IE6和firefox下良好表現(xiàn),估計(jì)其他瀏覽器就不會(huì)有什么大問題了。(至少我自己深有體會(huì))
10. 重構(gòu)你的代碼
很多情況下,解決一個(gè)問題,可能比重構(gòu)你的代碼要花更多的時(shí)間。比如上一次給公司寫一個(gè)頻道頁(yè)面的,沒有一邊制作,一邊測(cè)試IE6的表現(xiàn),導(dǎo)致最近有很多奇怪的問題,因?yàn)椴季直容^復(fù)雜。后來(lái),干脆重構(gòu)代碼。用了2天。我想,如果是想解決方法,或許2天都搞不定。

1. 使用 DOCTYPE
你需要在HTML頁(yè)面的最頂部加上DOCTYPE類型,當(dāng)然, strict版是值得推薦的,例如:
復(fù)制代碼
代碼如下:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
或者, XHTML頁(yè)面的!DOCTYPE:
復(fù)制代碼
代碼如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
你最不想看到的是,IE6進(jìn)入怪癖模式 – 其實(shí)已經(jīng)夠多怪癖了。
2. 設(shè)置position: relative
設(shè)置position:relative解決了不止一個(gè)問題,特別當(dāng)需要設(shè)置對(duì)齊的時(shí)候。很明顯,你需要明白的一點(diǎn)是,絕對(duì)定位是相對(duì)來(lái)說的。說不定,因?yàn)槟銢]有設(shè)置,而不知道東西都飛到那去了。比如,你設(shè)計(jì)了每篇文章前都有一張圖片,最后,你發(fā)現(xiàn),只有一張圖片在頁(yè)面上,或許,是他們重疊了。
3. 給浮動(dòng)元素設(shè)置 display:inline 值
這源于著名的IE6雙倍外邊距BUG,例如,你給一個(gè)DIV設(shè)計(jì)了浮動(dòng),并且,設(shè)置了margin-left:5px;,在IE6中很可能就是margin-left:10px了,這里,給浮動(dòng)元素設(shè)置 display:inline;,即可解決問題。
4. 為元素設(shè)置 hasLayout
很多IE6(或IE7)的問題可以用設(shè)置hasLayout值的方法來(lái)解決。(如果你不知道hasLayout是什么,請(qǐng)看這里)
最簡(jiǎn)單的給元素設(shè)置hasLayout值的方法是給加上CSS 的height或width(當(dāng)然,zoom也可以用,但這不是CSS的一部分)。設(shè)置一個(gè)具體的值是推薦的,但有時(shí)候并不一定知道高度多少,這里,你可能會(huì)用到height:1%。如果父元素沒有設(shè)置高度,那么元素的物理高度并不會(huì)改變,但是,已經(jīng)具備hasLayout屬性。
5. 解決字符重復(fù)出現(xiàn)的問題
復(fù)雜的布局可能導(dǎo)致一些浮動(dòng)元素里面的文字,出現(xiàn)在清理浮動(dòng)位置的下面。這是一個(gè)奇怪的問題,下面這此可以幫你解決:
確保浮動(dòng)元素設(shè)置了 display:inline;
在浮動(dòng)元素中使用 margin-right:-3px;
在浮動(dòng)元素的最后一個(gè)元素后加上一個(gè)IE注釋,例如: <!--[if !IE]>把你的注釋放這里… <![endif]-->
在最后的元素中加上一個(gè)DIV(這以設(shè)置width 為90% 或者其他相似的高度)
UPDATE: 最簡(jiǎn)單的方法是刪除掉所有注釋。(感謝恬瑋兒的提示,我自己并沒有遇到過,不過,google了一下,發(fā)現(xiàn)這個(gè)方法也可以解決,并且,這是值得推薦的一個(gè)方法。)
你可以到positioniseverything.net中查看更多關(guān)于這個(gè)的解釋。
6.只在<a>標(biāo)簽中使用hover,IE6只支持<a>標(biāo)簽顯示hover樣式
當(dāng)然,你還是可以通過JS來(lái)解決這個(gè)方法。但是, 這關(guān)于到可訪問性的問題。建議不要把重要的內(nèi)容設(shè)置在利用JS來(lái)實(shí)現(xiàn)的hover中。
7. 使用!important 或高級(jí)選擇器來(lái)區(qū)分IE瀏覽器
比如min-height可以避免使用CSS來(lái)實(shí)現(xiàn)對(duì)IE的兼容。
復(fù)制代碼
代碼如下:#element {
min-height: 20em;
height: auto !important;
height: 20em; /* 讓IE6顯示這個(gè)高度 */
}
IE6 并不能正確地識(shí)別min-height,可以設(shè)置固定的高度,讓IE6解析為20em。即使如此,它還是會(huì)因?yàn)閮?nèi)容的尺寸擴(kuò)大而改變高度。而另一個(gè)方法是使用高級(jí)選擇器:
復(fù)制代碼
代碼如下:#element {
min-height: 20em;
height: 20em;
}
/* 忽略 IE6 */
#element[id] {
height: auto;
}
8. 避免按比例確定的尺寸
比例會(huì)讓IE6變得錯(cuò)亂,除非你給父元素添加一個(gè)確切的高度。不然,給其他的加上!important,例如:
復(fù)制代碼
代碼如下:body{
margin: 2% 0 !important;
margin: 20px 0; /* IE6 可讀 */
}
9. 盡早測(cè)試,經(jīng)常測(cè)試
別忘記盡早測(cè)試,經(jīng)常測(cè)試, 除非你的程度已經(jīng)完成。不然,你可能花更多的時(shí)間來(lái)解決IE6的問題。一般情況下,如果你的網(wǎng)站能在IE6和firefox下良好表現(xiàn),估計(jì)其他瀏覽器就不會(huì)有什么大問題了。(至少我自己深有體會(huì))
10. 重構(gòu)你的代碼
很多情況下,解決一個(gè)問題,可能比重構(gòu)你的代碼要花更多的時(shí)間。比如上一次給公司寫一個(gè)頻道頁(yè)面的,沒有一邊制作,一邊測(cè)試IE6的表現(xiàn),導(dǎo)致最近有很多奇怪的問題,因?yàn)椴季直容^復(fù)雜。后來(lái),干脆重構(gòu)代碼。用了2天。我想,如果是想解決方法,或許2天都搞不定。
相關(guān)文章
- 這篇文章主要介紹了淺談原生頁(yè)面兼容IE9問題的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起2020-12-16
新版chrome瀏覽器設(shè)置允許跨域的實(shí)現(xiàn)
這篇文章主要介紹了新版chrome瀏覽器設(shè)置允許跨域的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起2020-11-30css hack之\9和\0就可能對(duì)hack IE11\IE9\IE8無(wú)效
每次設(shè)計(jì)一張網(wǎng)頁(yè)或一個(gè)表單,都被各種瀏覽器的兼容問題傷透腦筋,尤其是IE家族。在做兼容性設(shè)計(jì)時(shí),我們往往會(huì)使用各種瀏覽器能識(shí)別的獨(dú)特語(yǔ)法進(jìn)行hack,從而達(dá)到各種瀏覽2020-03-20css區(qū)分ie8/ie9/ie10/ie11 chrome firefox的代碼
這篇文章主要介紹了css區(qū)分ie8/ie9/ie10/ie11 chrome firefox的代碼,需要的朋友可以參考下2020-03-20- 這篇文章主要介紹了解決CSS瀏覽器兼容性問題的4種方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)2020-02-28
- 這篇文章主要介紹了常見的瀏覽器兼容性問題(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)2020-02-20
- 這篇文章主要介紹了border-radius IE8兼容處理的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)2020-02-12
- 這篇文章主要介紹了淺談?dòng)龅降膸讉€(gè)瀏覽器兼容性問題,詳細(xì)的介紹了幾種我遇到的問題和解決方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-09-26
- 這篇文章主要介紹了base64圖片在各種瀏覽器的兼容性處理的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-09-14
對(duì)常見的css屬性進(jìn)行瀏覽器兼容性總結(jié)(推薦)
這篇文章主要介紹了對(duì)常見的css屬性進(jìn)行瀏覽器兼容性總結(jié)(推薦)的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-07-20