情況一:當絕定位元素的父元素高或寛為奇數 時,該元素的 bottom 和 right 會獲取錯誤。詳見國外這篇文章(另有簡譯版IE6 絕對定位元素的 1px 間距 bug)
情況二:IE6下使用 font-size + vertical-align:middle 來設定圖片垂直居中的時候,如果圖片是奇數 會有1px的偏差,如圖:
詳情請瀏覽DEMO
情況一:當絕定位元素的父元素高或寛為奇數 時,該元素的 bottom 和 right 會獲取錯誤。詳見國外這篇文章(另有簡譯版IE6 絕對定位元素的 1px 間距 bug)
情況二:IE6下使用 font-size + vertical-align:middle 來設定圖片垂直居中的時候,如果圖片是奇數 會有1px的偏差,如圖:
詳情請瀏覽DEMO
在 IE6 下鼠標經過塊級(block)鏈接時,會產生一個作用域的bug。
Bug描述:
正常情況下,A鏈接設定了塊級(block)屬性,或者設定絕對定位(absolute) + 寛、高,在整個作用域之内,只要鼠標一進入到該範圍就應觸發a:hover的狀態(默認的手型圖標)。但在IE6下,當鼠標進入A鏈接的時候,並沒有觸發a:hover,只有當鼠標移到文字部份,a:hover才產生作用,狀態才隨即改變。如果A鏈接裡面不寫内容,只有一個空標籤的話<a>…</a>那麽在IE6下根本不能觸發a:hover。
例子詳見國外這篇文章。這裡主要看一下test1 – test4的測試情況:
test1(1):
A鏈接的父級haslayout=true,A鏈接自身是block,haslayout=false,
但鼠標經過時只有文字部份產生响應(IE6 Bug)。
test1(2):
和 test1(1) 情況相似,只不過它是借js觸發鼠標經過的效果,不是由CSS觸發,盡管這樣仍然只有文字部份產生响應。
test2(1):
A鏈接的父級haslayout=true,A鏈接自身是block,haslayout=true(使用zoom觸發),
鼠標經過時响應正常。
test2(2):
和 test2(1) 情況相似,只不過它是借js觸發鼠標經過的效果,使用zoom後,鼠標經過時响應正常。
test3(1):
A鏈接的父級haslayout=true,連續三個A鏈接自身都是block,第一個和第三個haslayout=false,第二個haslayout=true,鼠標經過時响應正常;就是說為相鄰的元素觸發layout也可解決問題。
test3(2):
和 test3(1) 情況相似,只不過它是借js觸發鼠標經過的效果。
test4(1):
A鏈接的父級haslayout=false,A鏈接自身是block,haslayout=false,鼠標經過時响應正常;就是說父級沒有觸發layout的情況下,是不會產生這個BUG的,鼠標响應亦正常,不用特意去觸發layout。
test4(2):
和 test4(1) 情況相似,只不過它是借js觸發鼠標經過的效果。
原文:Ultimate IE6 Cheatsheet: How To Fix 25+ Internet Explorer 6 Bugs
翻译:http://www.vfresh.org/w3c/727(译文对原文进行了补充)
对IE6最好的策略就是不去兼容它。
好吧,我知道你的难处,你不得不去兼容IE6这个狗血的浏览器,因此不得不在兼容IE6上花费很多时间。对此,我颇有同感,来让我来帮助你吧。
我不会象许多文章那样让你去抵制IE6,这并不会帮助到你(迫不得已时)去兼容IE6;因为IE6依旧占有一定的市场份额,你无法放弃IE6。本文将帮助你来解决这个难题。
我查阅过很多资料来摘录这些解决方案(有些是我自己提供的),现在我做成手册提供给大家搞定IE6这个家伙。我尽可能的提供了最优解决方案而不是一些hacks,并且提供了一些相关的资料。如果你发现有更好的方法或者本文有错误,请联系我。
在調試頁面的時候,發現一個怪現象,和 hasLayout導至使用了負邊距的元素,邊緣會被裁剪 的情況相似,本質上應是相同的,不過表現略有不同,產生影响的不是邊距(margin),而是邊綫(border)。
在IE6下,父元素包含一個子元素,這時為父元素設置border屬性就會影响到 它的下一個元素,使該元素的内容產生偏移,看似邊緣被“剪”掉?!IE6 demo1
HTML:
<div class="line1"><div>文字文字文字文字文字文字文字</div></div> <div class="line2">邊緣的地方不見了</div>
CSS:
.line1{padding:1px; border-left:4px solid #000;} .line2{border:1px solid red; }
經測試,boder值的大小就是偏移值的大小(可通過修改 border-left:4px 來測試)。而4條邊綫當中,設置上/下邊不會影响到一下個元素,但設置左/右邊就會造成影响:IE6 demo2
上面兩種情況都是普通的文本,如果換了别的呢?接著測試,我把受影响的文本換成超鏈接<a>,情況就變得有趣了。默認情況下,A鏈接仍舊偏移,當鼠標經過的時候,它就被“移”出來了。IE6 demo3
繼續測試,發現受影的不只是一個元素,是下邊幾個元素都會如此,不過,鼠标經過之後能夠被“移”出來的,就只有對上的一行內容。IE6 demo4
至此,或許還有其它情況出現,但我就沒有再測試了。上面說,問題的本質應是一樣的。為什麼說是“應該”?因為解決這個問題的方法除了為 .line1 觸發layout之外,還有一個方法,就是設4條邊。設邊綫(border)是不能觸發的layout的,可設了之後的確有效果,就是說,不用觸發layout也能解決該問題的。IE6 demo5
haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分。在Internet Explorer中,一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。