前端開發中IE6的問題的彙總

最初開發的時候是在IE10上開發,並簡單測試firefox,當開發完在IE6上兼容性測試時,一打開就傻眼了,所有的頁面就沒有能看的。

整整用了兩天的時間對應所有IE6,記錄下來方便自己以後查詢,也方便大家參考。

(個人認爲之所以出現IE6的問題,很少一部分原因在於IE6的解析的不同,而主要的原因還在於個人開發時使用的css以及佈局並不是最優的,開發時只是單純的實現效果。)


先說明IE6一些本身的問題:

1.jpg的透明圖片在IE6下失去透明效果

.banner_prev
{
    left:22px;
    background:transparent url(../images/narrow_prev.png) no-repeat;
    _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../images/narrow_prev.png");/*IE6有效*/
    _background:none;/*IE6有效*/
}

解決方法是添加IE6的濾鏡,採用hack,_和*效果一樣IE6都可以識別,而更高的版本以及別的瀏覽器不識別。

2.png的<img>標籤的圖片在IE6下被自動添加了純色的背景。

正常效果


IE6的效果


  解決方法是下載鏈接http://down.51cto.com/data/1033182的文件,該文件是我上傳的,不需要下載豆,免費下載。

將該js文件引用,並添加如下代碼

<!--[if IE 6]>
<script src="../js/DD_belatedPNG.js"></script>
<script>
$(document).ready(function () {
DD_belatedPNG.fix('.png, img');
})
</script>
<![endif]-->

代碼中的“.png”爲固定寫入,“img”代表<img>標籤,也可以是.class或#id

3.margin-left的雙倍邊距

舉個例子

<ul>

<li></li>

<li></li>

<li></li>

<li></li>

</ul>

第一種情況:所有的li都左浮動,但每行只顯示兩個,這樣就會出現li自動換行,如果此時設置li的margin-left,則在IE6下出現的效果是margin-left爲

設置的值得2倍。

這是因爲在IE6下如果有浮動且換行了,那麼第一個浮動元素的margin-left就會變成雙倍。

第一種情況:如果一個非block的元素,你設置成block顯示,則第一個元素margin-left也會出現雙倍的問題。

兩種情況的解決方法都是是 將li(即第一個元素)的dispaly設置爲display:inline;   或者不是用li的margin-left而是用ul的padding-left

4.IE6的layout問題

在IE6中浮動會有一定的問題,而此時需要出發IE6的layout,

可以對父元素增加width:XXX,或height:XXX或float:XXX或zoom:1

其中zoom:1爲最常用的方法。

在IE7下zoom:1沒有效果,需要添加width:100%;

5.IE6對css選擇器的支持

此處說的css選擇器不是jquery的選擇器,而是css中選擇器的寫法,IE6對以下的寫法不能識別,也正因這浪費了我整整1個小時調試一個問題。

①子選擇器:E1 > E2

該選擇器的意思是選擇E1下面的直接子節點,不包括子的後代節點,而E1 E2的寫法是選擇E1下面的所有爲E2的後代

IE6對E1>E2的寫法不支持,但支持E1  E2的寫法,但在寫的時候除非有必要,否則E1  E2的方式也少用,因爲如果後代有很多相同的節點,容易

不好控制,最好設置其id或class。

②相鄰選擇器E1+E2

選擇E1相鄰的E2,同樣IE6不支持。

6. IE6的scrollHeight

    頁面上有個按鈕,點擊的話我的透明的灰色蒙版將整個頁面蓋住,在IE6下當右側滾動條沒有出現時,我用js設置蒙版的高度爲document.body.scrollHeight

         此時發現蒙版並沒有覆蓋全部的高度,下方還剩餘一些

        解決方法是:採用document.documentElement.scrollHeight 

                 因爲在IE6裏document.documentElement.scrollHeight = document.body.scrollHeight + marginTop bottom高度 + 上下border寬度

7. IE6不支持min-width和min-height

   我採用的解決辦法是用js給width。



以下是個人寫css時不規範而在IE6下出現的問題:

1.水平居中

<div><a>xxxxxxx</a></div>

要想讓a標籤水平居中,設置div的text-align是沒有效果的,該css只是讓xxxxx文字水平居中,

最初我用的是對a標籤設置margin-left,但IE6下解析的效果不一致。

正確的寫法應該是設置a標籤的margin:auto;這樣會自動居中,所有瀏覽器都適用。


2.padding最好少用

padding在用的時候會使元素的大小發生變化,也會引起父元素的變化,儘可能改成父元素的margin,margin不會引起變形。在所有的瀏覽器上都一樣。


3.!important最好少用

!important雖然能解決臨時的問題,但用多了會導致整個文檔不受控制非常難以維護,所以應該以css的角度去控制,尤其是css的先後順序控制好。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章