2007年1月20日

IE6下相对定位的一个BUG

  这几天在写公司的网站,发现一个在IE6下的bug,具体表现为父子元素均为相对定位(relative)时,子元素从原位置偏移,但父元素却仍认为子元素在原来位置,并按偏移前的位置给子元素空出相应的像素,从而破坏布局。
  具体代码如下:


<div id="L">
  <ul>
    <li><a></a></li>
  </ul>
</div>

#L{
  position: relative;
  float: left;
  left: 0px;
  top: 0px;
  width: 148px;
  background: black;
}

#L ul{
  position: relative;
  left: -40px;
  width: 148px;
}

#L ul li {
  width: 148px;
}


写到这里时,这个列表在firefox2 Oprea9 IE7中均能表现良好了,但在在IE6中,父元素却在右边多出了40个像素,这40个像素来源于ie6的父元素认为子元素的位置并没有变化——虽然与此同时IE6正确的把ul元素偏移了40个像素。
最后,我们不得不为ie6准备一份单独的css(用import及ie6的注脚hack为ie6导入)
如下:

#L ul{
  position: absolute;
  top: 65px;
}

ie6的表现真是差劲,但是我们不能怪它,毕竟它是一个很多年前的浏览器了,作为五六年前的产品,它还是相当不错的。不过,现在IE7出来了,广大的IE用户你们有更好的选择,别跟我说你是盗版装不上,实际上有N种方式用上IE7。当然,作为我个人而言,我更喜欢Firefox。
最后,再次呼吁:告别IE6吧!

没有评论: