19
2008
04

解决IE6的经典BUG问题,面向网页开发人员

IE6双倍浮动BUG及解决办法

制作页面时常会碰到IE6双倍浮动BUG,以前的方法是用Hack,多写一行代码。如果不用Hack的话,就这样写,加上:

display:inline

将对象强制作为内联对象呈递,从对象中删除行。下列代码即演示了ie6中双倍边距问题:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">

<head profile="http://www.w3.org/2000/08/w3c-synd/#">

<meta http-equiv="content-language" content="zh-cn" />

<meta http-equiv="content-type" content="text/html;charset=gb2312" />

<title>blueidea</title>

<style type="text/css">

/*<![CDATA[*/

body {

margin:0

}

#div1 {

float:left;

margin-left:10px;

width:200px;

height:200px;

border:1px solid red

}


#div2 {

float:left;

margin-left:10px;

display:inline;

width:200px;

height:200px;

border:1px solid red

}


/*]]>*/

</style>

</head>

<body>

<div id=div1>

<a href="#">

web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全

</a>

</div>

<div style="clear:both;"></div>下面的就显示正常了,样式中应用了display:inline;

<div id=div2>

<a href="#">

web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全web<b style="color:black;background-color:#ff9999">标准</b>常见问题大全

</a>

</div>

</body>

</html>

浮动后本来外边距10px,但IE解释为20px,解决办法是加上display:inline;

IE6由注释引起的文字重影的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><b style="color:black;background-color:#a0ffff">多</b>了一只猪</title>

</head>

<body>

<div style="width:400px">

<div style="float:left"></div> 

<!-- -->

<div style="float:right;width:400px">↓这就是<b style="color:black;background-color:#a0ffff">多</b>出来的那只猪</div>

</div>

</body>

</html>

运行上述代码看到什么了?会发现折行多了一个“猪”字,造成这个问题的原因就是上面那有一段注释代码,确实是因为注释的原因,但为什么这样,也没什么道理,只能说是IE6的bug了。在ie7,ie5.5和firefox中都是好的,就是ie6如此。
1.去掉那行注释,或者去掉下面的float中的一个就正常了,这说明:注释造成文字溢出与区块的浮动有关。
2.或者将注释放到前面那应用float属性的标签前或后面那个应用float属性的标签后。发现显示也正常了。这说明:注释造成文字溢出与其位置有关。
3.去除中的“width:400px”,多余的“猪”字消失,页面正常显示。这说明:注释造成文字溢出与文字区块的固定宽度有关(无论是绝对值还是相对值)。

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><b style="color:black;background-color:#a0ffff">多</b>了一只猪</title>

</head>

<body>

<div style="width:400px">

<div style="float:left"></div> 

<!-- -->

<!-- -->

<!-- -->

<div style="float:right;width:400px">↓这就是<b style="color:black;background-color:#a0ffff">多</b>出来的那只猪</div>

</div>

</body>

</html>

我们会从上面的规律中得到这样一个公式:溢出文字的字数=注释的条数*2-1,这里的字数在中文或英文数字时都成立。当溢出的文字字数大于文本的字数时,文字区块将会消失。最终解决方法如下:

1、不放置注释。最简单、最快捷的解决方法,嘿嘿……。其实为了符合标准,加注释最好采用这种格式如果是这样就没有问题了

<!-->Put your commentary in here...<!--> 

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

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

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

IE6下为什么图片下方有空隙产生

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">

<head profile="http://www.w3.org/2000/08/w3c-synd/#">

<meta http-equiv="content-language" content="zh-cn" />

<meta http-equiv="content-type" content="text/html;charset=gb2312" />

<title>blueidea</title>

<style type="text/css">

/*<![CDATA[*/

div {

border:1px solid red;

background:orange;

}

img {

width:276px;

height:110px;

}

/*]]>*/

</style>

</head>

<body>

<div>

<img src="http://www.google.com/intl/en_ALL/images/logo.gif" alt="google" />

</div>

</body>

</html>

解决这个BUG的方法也有很多,可以是改变html的排版,或者定义img 为display:block
或者定义vertical-align属性值为vertical-align:top | bottom |middle |text-bottom
还可以设置父容器的字体大小为零,font-size:0

« 上一篇 下一篇 »

评论列表:

1.rainaxin  2008-09-17 20:39:07 回复该评论
今天遇到了这个问题,就是页面注释引起的,以前在蓝理也看过这样的bug,ie真的是很恼火!

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。