3

我面对的,我曾经在CSS中发现的最疯狂的一个问题...CSS下拉列表中显示,IE6,IE7,绝对定位错误

我有两个CSS-的jQuery水平下拉菜单,一个和一个在下面,点击它时显示下拉列表。

问题是当我点击在IE6和IE7上下拉,和绝对定位的元素越过相对定位的。上部下拉列表(绝对)显示下面的下拉(相对)。

的JavaScript:

$("button").click(function(e){ 
    $(".menu").hide(); 
    $(this).siblings(".menu").show(); 
    e.stopPropagation() 
}); 
$(document).click(function(){$(".menu").hide()}); 

HTML:

<div class="top"> 
    <div class="dropdown"> 
     <button>Dropdown1 v</button> 
     <div class="menu"> 
      <a href="#link">Option a</a> 
      <a href="#link">Option b</a> 
      <a href="#link">Option c</a> 
     </div> 
    </div> 
    <div class="dropdown"> 
     <button>Dropdown2 v</button> 
     <div class="menu"> 
      <a href="#link">Option d</a> 
      <a href="#link">Option e</a> 
      <a href="#link">Option f</a> 
     </div> 
    </div> 
</div> 

CSS:

.dropdown{float:left;display:inline;clear:left;position:relative} 
.menu{position:absolute;left:0;top:22px;z-index:1} 
.menu a{display:block} 

.menu{display:none;border:1px solid #ccc;padding:3px;background:#ffffe0} 

这里的例子:

http://jsfiddle.net/AEBaW/

这里的解决方案:

http://jsfiddle.net/AEBaW/2/

回答

4

有一个已知的问题,在IE中的z-index。它对绝对定位元素的处理方式不同于对相对定位元素的z-索引。这就像你有两组z指标。如果无法让所有元素都使用相同的位置,您可以通过使用相同位置的包装来修复它。

EDIT 1:

http://caffeineoncode.com/2010/07/the-internet-explorer-z-index-bug/

编辑2:

z index bug

Z-Index IE bug fix?

Internet Explorer z-index bug?

EDIT 3:

jQuery的解决方案:

http://www.vancelucas.com/blog/fixing-ie7-z-index-issues-with-jquery/

http://webdeveloper2.com/2010/01/how-to-fix-the-ie-z-index-bug-with-jquery/

+0

我试过不同的解决方法,从博客和论坛没有运气,如果有黑客,我会欣赏 – 2011-05-17 16:27:25

+0

@Nacho:如果你已经知道这是z-index错误,那么你应该已经包含所有这些信息在你的题。否则,我们会建议你不想要的各种修复。 – Sparky 2011-05-17 16:31:16

+0

事实是,我不知道,我已经记录在这个问题上,并有解决方法,但那些不适合我 – 2011-05-17 16:35:09

0

当我与IE工作的z-index问题我发现这是确保每一个容器是一样堆叠的一部分的最佳解决方案-指数。意思是,所有元素都作为同一个堆栈的层次。这通常会让IE变得有趣。

您可以通过添加position:relative; z-index:auto;到所有的容器都这样做。如果可能的话,您希望一直这样做。这应该迫使IE浏览器考虑所有的堆栈,从而正确分层。

+0

OP说他拥有绝对和相对定位的物品,所以他不能在所有物品上添加“位置:相对”。 – Sparky 2011-05-17 16:39:27

+0

他只是对容器有意义,但我试过了,反正不起作用。 – 2011-05-17 16:44:26

+0

只有在没有'position:'标签时才需要添加'position:relative'。通过将这添加到**不具有'position:'的所有父容器中,它们将加入相同的堆叠上下文。 – 2011-05-17 16:44:30