当前位置:首页>网络学院>网页制作>Web标准>文章内容

IE双倍边距BUG的现象及解决办法

[ 来源:近水社区 | 作者: | 时间:2008-01-07 | 收藏 | 推荐 ] 【

最近有很多人问我:在IE6下设置了几个标签的float和margin属性,但左边距明明设的是5px,怎么出来后就变成了10px,而在FireFox下就,没问题。在解释了这是典型的IE6的双倍边距BUG的现象之一后,并帮助那位朋友解决了问题。

其实,IE6的双倍边距BUG也常常是捆扰初学者的一个难题。下面我总结一下此BUG的现象和解决办法。

第一种,也是最常见的一种就是上面说到的,设置了浮动(float)后再设置外边距(margin),外边距就会是原来值的2倍。请看下面的代码:

<!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>IE双倍边距bug</title>
<script type="text/javascript" language="javascript">
function sel(id) {switch(id) {case "1":document.getElementById("sub1").style.display = "block";break;case "2":document.getElementById("sub1").style.display = "inline";break;}}
</script>
<style type="text/css">
#all {width:260px;height:63px;background-color:#CCC;}
.sub {
  float:left;
  font-size:12px;
  line-height:16px;
  margin:10px 0 0 10px;
  padding:5px;
  width:90px;
  color:#FFF;
  background-color:#F90;
}
#sel {
  margin-top:5px;
}
select {
  width:260px;
}
</style>
</head>

<body>
<div id="all">
<div class="sub" id="sub1">上边距和左边距都是10px</div>
<div class="sub">上边距和左边距都是10px</div>
</div>
<div id="sel"><select onchange="sel(this.value)"><option value="1">块级对象的默认值:block</option><option value="2">强制转换为内联对象:inline</option></select></div>
</body>
</html>

1、问题:从上面例子中“margin:10px 0 0 10px”可以看出,上边距和左边距同样为10px,但第一个对象距左边有20px。

2、解决办法:当将其display属性设置为inline时问题就都解决了。

3、说明:这是因为块级对象默认的display属性值是block,当设置了浮动的同时,还设置了它的外边距就会出现这种情况。也许你会问:“为什么第二个对象和第一个对象之间就不存在双倍边距的BUG”?因为浮动都有其相对应的对象,只有相对于其父对象的浮动对象才会出现这样的问题。第一个对象是相对父对象的,而第二个对象是相对第一个对象的,所以第二个对象在设置后不会出现问题。

4、总结:这个现象仅当块级对象设置了浮动属性后才会出现,内联对象(行级对象)不会出现此问题。并且只有设置左边距和右边距的值才会出问题,上下边距不会出现问题。

第二种,也是比较常见的一种。当对象1设置了左浮动,对象2在不设置取消浮动的情况下会浮在对象1的右边。但当对象2不设置浮动时,二者之间会出现空隙。请看下面的代码:

<!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>IE双倍边距bug</title>
<script type="text/javascript" language="javascript">
function sel(id) {switch(id) {case "1":document.getElementById("right").style.styleFloat = "none";break;case "2":document.getElementById("right").style.styleFloat = "left";break;}}
</script>
<style type="text/css">
#all {
  width:240px;
  padding:10px;
  font-size:12px;
  color:#FFF;
  background-color:#CCC;
}
#left {
  float:left;
  width:100px;
  line-height:16px;
  background-color:#F90;
}
#right {
  width:100px;
  line-height:16px;
  background-color:#09C;
}
#sel {
  float:left;
  margin-top:5px;
}
select {
  width:260px;
}
</style>
</head>

<body>
<div id="all">
<div id="left">第一个对象,正常设置了浮动</div>
<div id="right">第二个对象,没设置浮动</div>
</div>
<div id="sel"><select onchange="sel(this.value)"><option value="1">默认第二个对象不浮动:float:none</option><option value="2">设置第二个对象左浮动:float:left</option></select></div>
</body>
</html>

1、问题:对象1设置浮动,对象二没设置浮动,在IE6中二者之间会出现间隙。在FireFox下对象2默认是取消浮动换行显示。FireFox下如图:

(编辑:IT资讯之家 www.it55.com

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]