码迷,mamicode.com
首页 > 其他好文 > 详细

定位布局中关于z-index的一些问题

时间:2019-12-30 15:57:32      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:失效   init   效果   over   auto   默认   center   相互   class   

定位布局中关于z-index的一些问题

使不同父元素的子元素不会被其他父元素遮盖

  • 背景 两父元素相互遮盖(或部分遮盖)
  • html如下
    <div class="main">
        <div class="a"> 
            <div class="a1">1</div>
            <div class="a2">2</div>
        </div>
        <div class="b">
            <div class="b1">3</div>
            <div class="b2">4</div>
        </div>
    </div>
.main{
    width: 400px;
    height: 200px;
    margin: 20px auto;
    background: #f0f;
    position: relative;
}
.main div>div{
    width: 40px;
    height: 40px;
    background: #ccc;
    line-height: 30px;
    text-align: center;
    position: absolute;
}
.a,.b{
    width: 100%;
    height: 100%;
}
.a{
    background: #ff0;
    position: absolute;
}
.b{
    background: #0ff;
    position: absolute;
    padding-left: 40px;
}
.a2,.b2{
    margin-top: 40px;
}

技术图片

  • 正常情况下,对main相对定位,a和b绝对定位并且长宽设置为100% ,a1,a2,b1,b2全部都设置定位(根据情况使用相对定位或绝对定位)
  • 为了使四个不会被盖住,对b设置左边距,a2,b2设置上边距
  • 然后就会有一个问题,b盖住了a,

    这是因为默认布局中下一个元素始终会覆盖上一个元素,除非设置了特殊属性(position transform)

  • 这种情况可以通过对a和b不设置z-index 或设置为initial 不设置时这两个会在同一层级
  • 然后对子元素(a1-b2)设置z-index (大于1的数值都可以)就可以盖住父元素
  • 注意,只要设置了,哪怕设置z-index为同一数值也不行(后者会覆盖前者)
.main div>div{
    z-index: 10;
}

技术图片

还有一种方法可以很好的解决这个问题

  • 把a和b的长宽都设置为0 然后a1,a2,b1,b2的位置都通过定位控制
.a,.b{
    width: 0;
    height: 0;
}

还有另一种思路是用在特殊情况的,比如当a和b会涉及到transform 等令z-index失效的属性时,而且b必须有一定的长度

  • 将b定位到main 的外边,然后将b的子元素定位回原本的位置
.b{
    position: absolute;
    left: 100%;
}
.b div{
    left: -360px;
}

技术图片

  • 如果不需要显示b则对main添加overflow:hidden;即可
.main{
    overflow: hidden;
}

技术图片
如果有什么不足之处,请指正,谢谢

定位布局中关于z-index的一些问题

标签:失效   init   效果   over   auto   默认   center   相互   class   

原文地址:https://www.cnblogs.com/tianZiDiYiHao/p/12120122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!