CSS下拉列表显示下面的下拉列表,IE6,IE7,绝对定位错误

时间:2011-05-17 16:21:57

标签: css internet-explorer-7 css-position internet-explorer-6 z-index

我正面临着我在css中遇到过的一个最疯狂的问题......

我有两个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/

2 个答案:

答案 0 :(得分:4)

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

编辑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?

编辑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/

答案 1 :(得分:0)

当我不得不使用IE z-index问题时,我发现最好的解决方案是确保每个容器都是同一堆叠索引的一部分。意思是,所有元素都充当同一堆栈的层。这通常是让IE行为有趣的原因。

您可以通过向所有容器添加position:relative; z-index:auto;来执行此操作。如果可能的话,你想要一直这样做。这应该强制IE考虑堆栈的所有内容,从而正确地分层。