问题来源于实践
这段时间做了一个项目优化,对于原有的内容进行了重新设计实现,其中一项就是对于label标签添加hover层进行解释说明,最常用的办法及时label的容器设置relative,然后hover层作为它的子元素设置absolute,然后在使用label的hover伪类来控制hover层的显示和隐藏,这其中一个要求及时hover层必定要求能够遮住页面中其他的元素,所以最常用的办法是设置它的背景颜色,然后让它的z-index处于合理的位置,一切都是这样设计的,但是最终的效果却出现了hover层设置bg为#fff的时候,hover层显示时还是会把底部内容给透出来,第一反应就是opacity设置为1,但是还是没有效果(因为背景为白色,所以有点坑)
最终问题定位在父元素的opacity属性设置为不为1的值导致的,这样即使hover层(作为子元素)设置了bg和opacity为1,也依然会存在一定的透明度。
testcode:
<style type='text/css'>
.container{
width:400px;
height: 400px;
border:1px solid red;
border-radius: 8px;
position: relative;
opacity: 0.5;
}
.child{
position: absolute;
border:1px solid gray;
border-radius: 6px;
width:200px;
height: 200px;
bottom: -180px;
opacity: 1;
font-weight: bold;
background: #0000ff;
}
</style>
</head>
<body>
<div class="container">
<h2>this is a container with opacity : 0.5</h2>
<div class="child">
this is child dom with opacity :1
</div>
</div>
<h3 color='black'>this is a dom covered by child width color : black </h3>
</body>
demo:
测试结果和问题排查之后的结果一致(设置父元素的opacity为1通过了测试),父元素的opacity会影响到子元素,即使子元素自定义了opacity属性;还发现最后元素遮住了字体之后,背景颜色还能透给底部的文字,相当于底部内容文字形成了一个遮罩的效果,是不是可以用来设计内容呢?
总结:在设置opacity时,需要排查父元素是否已经设置,需要考虑对于元素中所包含的子元素的影响