IE6的3像素 bug解決方案分享

在我們這樣一個神奇的國度,到了2014年了,居然還是有很多人的電腦上用著XP,安裝的是IE6,他們沒有想過要升級,我們就得想著兼容他們 。。。。
一、 6爺我喝高了,最后一行有重影 。那什么是IE6 的3像素bug?

IE7修正了IE6中的一個bug,bug名字就叫做3像素bug , 即文字溢出bug. 表現形式是ie6瀏覽器下文字或者圖片溢出,莫名其妙的自動復制幾個字符 。如下圖,就自動溢出了一個下一頁 。


IE6的3像素 bug解決方案分享



二、3像素bug是怎么產生的?

一個容器A包含2兩個具有float樣式的子容器B和C 。
第二個容器C的寬度大于父容器A的寬度,或者父容器A寬度減去第二個容器C寬度的值小于3 。
在第二個容器前存在注釋(這也是為什么此bug也叫做IE6注釋bug的原因) 。

IE6的3像素 bug解決方案分享


下面是這段代碼再現了bug的產生過程,如果用ie6瀏覽 , 則在下面 會多出一個醉字 。

div style=width:200px;
div style=float:left;/div
div style=float:left;width:200px;我是6爺,我沒醉/div
/div

IE6的3像素 bug解決方案分享

【IE6的3像素 bug解決方案分享】三、怎樣讓6爺快速醒酒?ie 6 3像素bug的最佳解決辦法:margin-right:-3px;

關于解決辦法網上有很多轉載 , 但是我一一試過之后很多都不奏效或者不理想 。下面是一段摘錄:

1.改變結構,不出現【一個容器包含2兩個具有float樣式的子容器】的結構 。
此解決方案的評論:瘋了!因噎廢食的做法 。
2.減小第二個容器的寬度,使父容器寬度減去第二個容器寬度的值大于3,例如將本文示例中第二個子容器的寬度改為197px 。
此解決方案的評論:在滿足頁面布局的前提下可以使用 。但是當情況比較復雜的時候,可能實施起來比較困難 。
3.去掉所有的注釋 。
此解決方案的評論:最直接的做法,但是沒有注釋的代碼,的確不是一個好的代碼寫作習慣 。
4.修正注釋的寫法 。將 ! 這里是注釋內容 寫成![if !IE]這里是注釋內容![endif]
此解決方案的評論:還不錯的解決方案,但是并不是每個人都對![if !IE]這里是注釋內容[endif]這種注釋寫法很欣賞 。
5.在第二個容器后面加一個或者多個div style=clear/div來解決 。
此解決方案的評論:另人感覺很不爽的解決方案 。但是的確能解決 。影響網頁效率

這五種方法我都不推薦,根據我的實驗最直接的解決問題的方法是在父容器A添加 margin-right:-3px; 一般情況下都可以解決這個問題 。

div style=width:200px;margin-right:-3px;
div style=float:left;/div
div style=float:left;width:200px;我是6爺,我沒醉/div
/div

四、珍愛生命,遠離ie6

因為溢出bug產生的根本原因沒人可以解釋 , 所以也就沒有對應的一勞永逸的辦法 。要從根本上解決這個問題只有一個辦法,就是kill ie6 。但是MS微軟比我們還著急,可是就是不給力啊 。。。。。

相關經驗推薦