IE绝对定位元素始终被遮挡或者消失的解决方法

最近做一个下拉菜单,当鼠标悬停在主菜单上,显示下拉菜单。ie8和FF都很正常,但是 ie6下拉菜单内容始终被下边的内容遮挡。

试了很多种解决办法。发现原来是IE的bug。 解决方法如下:

1.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,以及没有清除浮动时,IE6/7,FF中显示一致; 

2.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示; 

3.当绝对定位层的邻近浮动层的宽度等于父层宽度时,以及没有清除浮动时,IE6不显示绝对定位层,IE7/FF显示; 

4.当绝对定位层的邻近浮动层的宽度等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示; 

要解决这个BUG的方法也很简单,让绝对定位层不挨着浮动层放置就好了,还有个更简单的方法,在绝对定位元素和其他元素之间加一个空白的div。 

再来看看绝对定位元素神秘消失被遮挡的现象 

先了解一下所涉及到的几个定位特性: 

1. 相对定位元素默认的z-index的数值是0。 

2. 当两个相对定位同时出现时,代码靠后的z-index优先。 

3. 子级遵循父级设定的z-index;如果子级设定了绝对定位、z-index,可以冲破父级显示 

看下面的代码: 

 

 

复制代码代码如下:

<div style="position:relative; background:#FF0000; width:200px; height:100px;"> 

<div style="position:absolute; background:#FFFF00; width:49px; height:50px; left:106px; top:310px; z-index:100"></div> 

</div> 

<div style="position:relative; background:#000000; width:200px; height:100px;"></div> 

<div style="position:relative; background:#9900FF; width:200px; height:100px;"></div> 

 

代码解释:上面是三个相邻的相对定位的层,在第一个层里加了个相对其绝对定位的层,按照理论,这个绝对定位的元素是在三个相对定位元素之上的,但是,实际却没有显示。尝试设置z-index值也没有效。 

网上解决这个bug的办法一般用hack使B为负值,来降低 B 在IE下级别 

但是这种方法在z-index为负值时,产生了新的ie bug 

按照定位的特性,ie的这个bug是可以回避的 

从表面上看 下面的层 遮住了上面的绝对定位层,实际上是下面的 层遮住了绝对定位的的父级层,只要将 该父级层 的z-index设定大于后面的层即可

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章