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設定大於後面的層即可

 

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