z-index无法按预期工作(Chrome和Opera)

时间:2010-12-22 06:12:25

标签: html css z-index

我有一个带有“opaque”类的div和另一个带有“product-info”类的div,它们都处于同一级别。

代码如下:

<div class="opaque"></div>
<div class="product-info">
    <img class="product-image" src="/Images/D3.jpg" />
    fsdfdsfsdfs
</div>
.opaque 
{
    background-color: White;
-moz-opacity:.60; filter:alpha(opacity=60); opacity:.60;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 1;
}

.product-info 
{
padding: 5px;
text-align: center;
z-index: 2;
}

请注意,product-info设置为z-index 2,opaque设置为z-index 1.因此product-info应显示在opaque上,因此不应该褪色。但是,product-info(和text)中的图像会变淡。这种情况发生在Chrome和Opera中,因此我希望这是应该发生的事情,因为它们不是IE!

如上所示,有许多HTML代码,每个嵌套在lis中,设置为向左浮动,宽度为33%。当页面完全加载($(window).load())时,我使用jQuery来检测所有产品的最大高度,并将该高度应用于所有其他产品。我已经尝试删除所有jQuery以防这会影响z-index,但是我得到的结果只是一个不整齐的外观和感觉。

我尝试使用Google Chromes Inspect Element工具,并且相关元素显示正确的特征。

谁能看到我在这里做错了什么?我一直试图解决这个问题几天,并想知道发生了什么。

谢谢。

此致

理查德

所要求的完整代码:

我认为这就是所需要的。我将在几分钟内创建一个只包含此代码的页面,以查看它是否能够重现问题。

<div id="BodyTag_ContentPanel">
    <div class="overlay-background"></div>
    <div class="scroll-pane">
        <div>
            <ul class="product-list">
                <li class="product">
                    <div class="spacer">
                        <div class="opaque"></div>
                        <div class="product-info">
                            <img class="product-image" src="/Images/D3.jpg" />
                            <div class="enlarge">
                                <div class="image-enlargement">
                                    <span class="close"><img src="/Images/close.jpg" /></span>
                                    <div class="enlargement">
                                        <div class="image-container"><img src="/Images/D3.jpg" /></div>
                                        <div class="product-code"><span class="text-container">D3</span></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="product-code">D3</div>
                        <div class="clear"></div>
                    </div>
                </li>
            </ul>
        </div>
    </div>
</body>
.product-list 
{
    list-style: none;
    padding: 0;
    width: 100%;
}

.product 
{
    width: 33%;
    height: 25%;
    float: left;
    position: relative;
}

.product .spacer 
{
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    margin: 10px;
    padding: 5px;
    border: 4px solid #C47F50;
    position: relative;
}

.product .opaque 
{
    background-color: White;
    -moz-opacity:.60; filter:alpha(opacity=60); opacity:.60;
    position: absolute;
    width: 100%;
    height: 100%;
    left: 0;
    top: 0;
    z-index: 1;
}

.product .product-info 
{
    padding: 5px;
    text-align: center;
    z-index: 2;
}

.product .product-info .product-image 
{
    max-width: 200px;
    max-height: 200px;
    min-width: 150px;
    min-height: 150px;
    z-index: 2;
}

.product .product-code 
{
    position: absolute;
    bottom: -15px;
    width: 50%;
    margin-left: auto;
    margin-right: auto;
    background-color: White;
    text-align: center;
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    border: 4px solid #C47F50;
    line-height: 20px;
    z-index: 2;
}

.product .image-enlargement 
{
    position: fixed;
    display: none;
    padding: 5px;
    background-color: White;
    -moz-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    border: 4px solid #C47F50;
    z-index: 103;
}

.product .enlarge
{
    float: right;
}

5 个答案:

答案 0 :(得分:32)

我找到了解决方案!!我只是将position: relative;添加到.product-info。我不敢相信我是如此愚蠢到不首先尝试!感谢您的努力@Thomas&amp; Lazycommit。 @Lazycommit您的链接派上用场 - 它确认我的代码应该一直在工作,如果它不是为了错过position: relative;。我注意到他们已经为示例中的所有div设置了position属性 - 这就是让我尝试它的原因。

答案 1 :(得分:3)

这是一个很大的主题。您可以从Firefox开发人员那里查看this页面,以便更好地理解浏览器堆叠。

答案 2 :(得分:1)

尝试将应该在后面的项目的z-index设置为负数,例如-1:)

答案 3 :(得分:0)

我知道这是旧的,但你可以使用rgba()代替不透明度并摆脱“product-info”div。这与您想要的效果相同,因为rgba()使用不同的方法来导致透明度,这也不会使子元素变得透明。使您想要的效果更容易。

答案 4 :(得分:0)

如果有外部div来设置position: fixed;并且您需要position: fixed;那么添加z-index与内部div相同。 例如:

.notifications {
    position: fixed;
    width: auto;
    max-width: 70%;  
    z-index: 9999;
}

.notifications > div {
    position: relative;
    z-index: 9999;
    /*  margin: 5px 0px;*/ /*default value*/
    margin: 65px 10px;
    display: inline-block;
}

会正常工作。

但如果下面的通知类没有正确设置Chrome中的z-index

.notifications {
    width: auto;
    max-width: 70%;  
    z-index: 9999;
}