在蓝色论坛看到这样一篇帖子 《IE中发现新BUG “重影”》,觉得很有意思。于是在想到底是什么原因造成的呢?便做了以下测试:

实验代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>多了一只猪</title>
</head>
<body>
<div style="width:400px">
<div style="float:left"></div>
<!-- -->
<div style="float:right;width:400px">↓这就是多出来的那只猪</div>
</div>
</body>
</html>

1、在 IE、Firefox 中测试,只在 IE 出现文字溢出现象。

说明:注释造成文字溢出是 IE 的 BUG 。

2、去除 <div style=”float:left”></div> 中的“float:left;”,你会发现多出来的“猪”字不见了,页面正常显示。同样去除 <div style=”float:right;width:400px”> 中的“float:right;”,多余的“猪”字也同样消失,页面正常显示。

说明:注释造成文字溢出与区块的浮动有关。

3、将注释转移到 <div style=”float:left”></div> 前面,多余的“猪”字消失,页面正常显示。将注释转移到 <div style=”float:right;width:400px”> ↓这就是多出来的那只猪 </div> 下面,多余的“猪”字也同样消失,页面正常显示。

说明:注释造成文字溢出与其位置有关。(可与第2点结合理解)

4、去除 <div style=”float:right;width:400px”> 中的“width:400px”,多余的“猪”字消失,页面正常显示。

说明:注释造成文字溢出与文字区块的固定宽度有关(无论是绝对值还是相对值)。

5、增加注释的条数:当1条注释时,则多出来 1 个字;2 条注释时,则多出来 3 个字;3 条注释时,则多出来 5 个字……

我们会从上面的规律中得到这样一个公式:溢出文字的字数=注释的条数 *2-1,这里的字数在中文或英文数字时都成立。

当溢出的文字字数大于文本的字数时,文字区块将会消失。

说明:溢出的字数与注释的条数有关。

由 1 和 2 的测试得知:注释不要放置于 2 个浮动的区块之间。

解决方法:

1、不放置注释。最简单、最快捷的解决方法,嘿嘿……

2、注释不要放置于 2 个浮动的区块之间。

3、将文字区块包含在新的 <div></div> 之间,如:<div style=”float:right;width:400px”><div> ↓这就是多出来的那只猪 </div> </div>。

4、去除文字区块的固定宽度,与 3 有相似之处。

可能以上的分析和解决方法有不到位或者不准确的地方,欢迎讨论指正。



共有7 条评论

  1. 1. 头像 WordPress

    你好,我是一条评论。
    要删除这条评论,请先登录系统,查看这篇文章的评论列表,然后您就可以看到编辑或者删除评论的选项了。

  2. 2. 头像 怿飞

    自己坐下沙发

  3. 3. 头像 eva

    尤其是IE6里面啊!!!
    很害人的!
    有发现过好几次这个问题,
    倒没有深究过几条注释多出几个字…
    出现过注释生成单独一行的现象..

  4. 4. 头像 xss

    链接到蓝色理想 《IE中发现新BUG “重影”》
    本页帖子上的链接少了个h。

  5. 5. 头像 怿飞

    @xss 谢谢,已经修改!

  6. 6. 注释在IE中造成文字溢出的研究 » 负罪者

    [...] 转自怿飞 太感谢作者了,困扰终于知道原因了 [...]

  7. 7. Duplicate Characters Bug 2 « Max's UED

    [...] 经典论坛版主怿飞的《注释在IE中造成文字溢出的研究》。顺便说一下怿飞是一个在web标准方便很有研究的朋友。虽然没有直接和他接触过,但是却一直拜读他的文章。在此也给这位文章曾给予我很大帮助的朋友做个广告,他的博客为地址为:http://www.planabc.net/。 [...]

发表评论

(必填)

(必填,会为您保密)

评论仅支持“a、abbr、strong、em、blockquote、code”几个简单的标签