为什么父元素设置 float 后子元素 z-index 失效?

我想通过设置.mask-layer:{ position: absolute; z-index: 9;}遮住img,但是父元素.mask-layer-show设置为float后 子元素z-index就失效了,是什么问题?

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
</head>

<body>
    <div class="box">
        <div class="mask-layer-show">
            <a href="#"><img src="img/product04.png" alt=""></a>
            <div class="mask-layer">

            </div>
        </div>
        <div class="mask-layer-show">
            <a href="#"><img src="img/product04.png" alt=""></a>
            <div class="mask-layer">
            </div>
        </div>



    </div>
    <style media="screen">
    .box{
        width: 1000px;
        height: 720px;
    }
    .box .mask-layer-show{
        float: left;
        width: 500px;
        height: 360px;
        position: relative;
    }
    .mask-layer{
        //遮罩层
        width: 500px;
        height: 360px;
        border: 1px solid red;
        position: absolute;
        z-index: 9; 
        background-color: #CCCCCC;
    }
    </style>
</body>

</html>

clipboard.png

阅读 6.4k
4 个回答
  • 1.代码注释错误
    在css中注释代码 使用的是 /遮罩层/

  • 2.在.mask-layer中,因为你加了定位position,是元素脱离了文档流,所以要指定它的位置,机left,top

 .mask-layer{
        /*    遮罩层*/
        width: 500px;
        height: 360px;
        border: 1px solid red;
        position: absolute;
        left:0;
        top:0;
        z-index: 9; 
        background-color: #CCCCCC;
    }
  • 3.遮罩不建议用纯色,建议用rgba

  • 4.展示效果

clipboard.png

  • 5.附代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .box{
            width: 1000px;
            height: 720px;
            margin: 0 auto;
        }
         .box .mask-layer-show{
            float: left;
            width: 500px;
            height: 360px;
            position: relative;
            z-index: 1;
        }
        .box .mask-layer-show a{
            display: block;
            width: 500px;
            height: 360px;
            overflow: hidden;
        }
        .mask-layer{
            /* 遮罩层*/
            width: 500px;
            height: 360px;
            border: 1px solid red;
            position: absolute;
            left:0;
            top:0;
            z-index: 9; 
            background:rgba(0,0,0,.5);
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="mask-layer-show">
            <a href="#"><img src="img/1.png" alt=""></a>
            <div class="mask-layer">
    
            </div>
        </div>
        <div class="mask-layer-show">
               <a href="#"><img src="img/1.png" alt=""></a>
            <div class="mask-layer">
                
            </div>
        </div>
    </div>
</body>
</html>

需要指定mask-layer的left和top值

楼上正解,需要加上.mask-layer{position: absolute;top:0;left:0; }

相同文档流里的z-index才有用。给他们设置都脱离或都不脱离文档流就行了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题