IE7 z-index命令错误

时间:2013-05-08 19:29:30

标签: javascript jquery html css internet-explorer-7

选中jsFiddle

在IE7中,上面jsFiddle中的代码会在下一个选择框元素(.sbOptions)下显示下拉列表(.sbHolder)

.sbOptionsz-index: 100;,但仍显示在.sbHolder下。

除了IE7之外,所有浏览器都可以正常工作,任何想法如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

IE7中存在错误:未设置z-index ,只要hasLayout设置为true,就会将堆叠上下文指定给定位元素。 .sbHolder的宽度和高度就是这样的hasLayout触发器。因此,第二个.sbHolder位于顶部。

IE7将您的规则更改为:

.sbHolder {
    position: relative;
    width: 130px;
    height: 30px;
    display: block;
    margin-bottom: 20px;
    z-index: 0; /* ! */
}

这会破坏你的计划,以增加.sbOptions z-index,因为.sbOptions会被.sbHolder的不规则堆叠上下文捕获。

我有一个IE< = 7的解决方案,因为当时只有一个.sbOptions被删除。这是否会出现问题?我们希望如此!

快走:http://jsfiddle.net/HRubx/

现在可以根据需要生成不规则堆叠上下文:

li:hover {
    position: relative;
}

答案 1 :(得分:0)

我不得不继续在IE7中添加Z-index 1来开始让jsfiddle工作。

你有没有尝试过ole zoom:auto in places?把它放进css。

此外,z-index和绝对似乎差不多......绝对将元素从文档流中拉出来,因此没有“真正的”z-index与另一个被拉出的不同。

也许尝试不同的定位方案..

答案 2 :(得分:0)

查看this文章。

简而言之,它使用jquery通过更改其他元素来对z-index进行排序:

  

修复IE7的许多问题的一种方法是动态反转页面上元素的默认z-index堆叠顺序。这将确保HTML源代码中较高的元素在页面上也具有更高的z-index顺序,从而解决了大多数IE堆栈问题。

$(function() {
    var zIndexNumber = 1000;
    $('div').each(function() {
        $(this).css('zIndex', zIndexNumber);
        zIndexNumber -= 10;
    });
});

答案 3 :(得分:0)

嘿兄弟,如果你不能改变你的标记,只需在父母的div中添加z-index,如上所述:

<div class="sbHolder" style="z-index:11">
    <a href="#" class="sbToggle"></a>
    <a href="#" class="sbSelector">1</a>

    <ul class="sbOptions">
         <li><a href="#1">1</a></li>
         <li><a href="#2">2</a></li>
         <li><a href="#3">3</a></li>
         <li><a href="#4">4</a></li>
    </ul>
</div>

<div class="sbHolder" style="z-index:10">
    <a href="#" class="sbToggle"></a>
    <a href="#" class="sbSelector">A</a>

    <ul class="sbOptions">
        <li><a href="#1">A</a></li>
        <li><a href="#2">B</a></li>
        <li><a href="#3">C</a></li>
        <li><a href="#4">D</a></li>
    </ul>
</div>