您的位置:首页 > 其它

[转]IE 下重复字符的 BUG 和解决办法

2010-08-03 17:57 204 查看
【转自】http://filmbus.blog.hexun.com/49309095_d.html

本文转自 smigoo MM 的《IE6重复字符BUG》,不过经我亲身体会,不只是 IE6 有这个 BUG,在特定条件之下,所有以 IE 为核心的浏览器下都有这 BUG,(此处省略三万字鄙视 IE 浏览器……)如果不是亲眼所见,估计读者仅看本文标题是很难想象 IE 有多变态。

  先上个测试页:http://wange.im/demo/duplicate-characters-bug/,你也可以下载这个 DEMO 页的源码在本地测试,后面的注释是4种解决方法,可以一一删掉注释查看。

  大家可以用 IE6、IE7、Firefox、Opera、Chrome 等主流浏览器分别来测试一下这个页面,你会发现一个有趣的现象。



  出现这个BUG的“机遇“其实并不大,要满足以下一个或者多个条件:

1.父元素的内部有多个浮动元素

2. 最后一个浮动元素前有隐藏元素:包括html注释和display:none的元素

3.子元素的宽度和父元素相同,父元素的宽度减去子元素宽度小于3px

  有个特别有意思的情况出现,当我在最后一个显示的div前,再加display:none;的div,下面又会增加不固定的数量的重复文字!

  最终得出的结论是:溢出文字的字数=注释的条数 *2-1

  这个变态BUG的最早文献是出现在2004年,这里可见。

  我不全文翻译了,总结一下他的方法。

1.把浮动的子元素加上display:inline;属性

2.去掉注释 ,使用IE专用注释。!–[if !IE]Put your commentary in here…![endif]–

  以下是 Smigoo MM 总结的解决方法:

1.把浮动的子元素加上display:inline;属性(推荐)

2.去掉注释和所有隐藏元素(缺点:特殊情况下不一定可以删除)

3.?把浮动的子元素加上margin-right:-3px;属性(缺点:要加IE6的hack,也算是好方法)

4.在隐藏的DIV外嵌套一个DIV(缺点:增加的结果复杂性)

  经过结合 smigoo MM 的总结,和我遇到的实际情况,因为我的父级浮动元素比较多,导致在 IE7/IE8 下都出现重复字符的囧境,所以我个人建议把浮动元素改成 display:inline-block;

  现在算是完美解决了 IE 下重复字符的问题,感谢 smigoo MM,再一次让我认清了 IE 的丑恶本质,和 G/F/W 有的一拼!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: