【问题标题】:CSS dropdown list showing behind the dropdown below, IE6, IE7, absolute positioning bugCSS下拉列表显示在下面的下拉列表后面,IE6,IE7,绝对定位错误
【发布时间】:2011-08-27 09:35:01
【问题描述】:

我面临着我在 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/

【问题讨论】:

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


    【解决方案1】:

    IE 中的 z-index 存在一个已知问题。它对绝对定位元素的 z-index 处理方式与对相对定位元素的处理方式不同。就像你有两组 z-indexes。如果您不能让所有元素都使用相同的定位,则可以使用具有相同定位的包装器来修复它。

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

    【讨论】:

    • 我从博客和论坛尝试了不同的解决方法,但没有成功,如果有破解,我将不胜感激
    • @Nacho:如果您已经知道这是 z-index 错误,那么您应该在问题中包含所有这些信息。否则,我们将建议您不想要的各种修复。
    • 事实是我不知道,我已经记录了这个问题并且有解决方法,但这些对我不起作用
    • @Nacho:这是 z-index 错误。在所有博客和论坛中阅读有关您的问题后,您就会知道这一点。请参阅我在答案中发布的链接。
    • @Nacho:如果没有,我还添加了两个指向声称可以修复它的 jQuery 解决方案的链接。
    【解决方案2】:

    当我不得不处理 IE z-index 问题时,我发现的最佳解决方案是确保每个容器都是同一个 stacking-index 的一部分。意思是,所有元素都充当同一堆栈的层。这通常就是让 IE 表现得有趣的原因。

    您可以通过将position:relative; z-index:auto; 添加到所有容器来完成此操作。如果可能的话,你想一直这样做。这应该迫使 IE 将所有内容都考虑为一个堆栈,从而正确分层。

    【讨论】:

    • OP 说他有绝对和相对定位的项目,所以他不能将“位置:相对”添加到所有内容。
    • 只有在没有position: 标签时才需要添加position:relative。通过将其添加到所有没有具有position: 的父容器,它们将加入相同的堆叠上下文。
    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多