关于opacity属性的探究

关于opacity属性的探究关于opacity属性的探究上问题!!在前一段时间我朋友和我讨论到了opcaity的属性问题问题如下:代码如下清重点关注opcaity<!–css样式–><style>.boxfather{width:500px;height:500px;background-color:blue;text-align:cen

大家好,又见面了,我是你们的朋友全栈君。

关于opacity属性的探究


上问题!!

在前一段时间我朋友和我讨论到了opcaity的属性问题问题如下:

代码如下清重点关注opcaity

    <!-- css样式 -->
    <style>
        .boxfather {
            width: 500px;
            height: 500px;
            background-color: blue;
            text-align: center;
            padding: 100px;
            box-sizing: border-box;
            opacity: 0.7;
        }
        .boxson {
            width: 300px;
            height: 300px;
            background-color: green;
            padding: 100px;
            box-sizing: border-box;
        }
        .boxgrandson {
            width: 100px;
            height: 100px;
            background-color: yellow;

        }
    </style>

    <!-- html结构 -->

    <div class="boxfather">
        <div class="boxson">
            <div class="boxgrandson">
            </div>
        </div>
    </div>

可见我们只是对父级元素设置了透明度,子元素和孙子元素都没有设置但是效果却是【左未设置透明度,右设置为0.7】

  关于opacity属性的探究  关于opacity属性的探究

然后我们去查手册看opacity属性是否存在继承性

关于opacity属性的探究

这是w3school给的答案,链接:https://www.w3school.com.cn/cssref/pr_opacity.asp

关于opacity属性的探究

这是某鸟教程给的答案,连接:https://www.runoob.com/cssref/css3-pr-opacity.html

那么问题来了,我们明明就没有给子孙元素设置透明度为啥就成这样了呢?

 

提出质疑:w3school和菜鸟教程写错了??


于是我们开始探索到底怎么回事,【质疑权威】是非常好的精神,但是一定要有根据的提出于是我们引入了jQuery辅助一探究竟

  <script src="./jquery.min.js"></script>
    <script>
        $(document).ready(function(){
           var sonop = $(".boxson").css('opacity')
           var grandsonop = $(".boxgrandson").css('opacity')
           console.log(sonop,grandsonop);
        })
  </script>

有了jQuery老大哥的帮助我们看一下结果:

关于opacity属性的探究

?????‍不该这样呀!!!【质疑无效!!!】



再提问题:在知道opacity属性不具有继承性的基础下我们的代码结果表现了“继承”的“性状”?(难道。。。这儿子不是亲生的??!?‍♂️)

 


解决思路:代码没问题,文档没问题,探究一下opacity实现机制

(翻阅好多资料后。。。。。)关于opacity属性的探究

1,发现了一个这样的教程

  关于opacity属性的探究

决定上手试一下试的过程中我又试着搜了一下这个

关于opacity属性的探究

没想到呀结果令我喜出望外   关于opacity属性的探究

在解决方法中这个解决方案令我激动不已,先上链接 https://blog.csdn.net/weixin_29947843/article/details/107752117

在这位博主的文章中有一个层级的概念使我找到了打开世界的大门!!!



正文开始:层级与蒙版

在经过多轮的代码实验后我发现opacity属性在实现的原理上极度类似于PS中的蒙版概念

大概的实现原理图如下:

关于opacity属性的探究

在原有的div盒子的区域上方添加了蒙版实现了opacity透明的效果而且这层所谓的“蒙版”的层级要高于div的默认层级

尝试性解决1:提高不要透明度的盒子层级

于是有了如下的css新增:

              .boxfather:position: relative;    z-index: 1;

              .boxson :   position: absolute;   z-index: 50;

              .boxgrandson :   position: absolute;   z-index: 100;

控制台输出结果:关于opacity属性的探究

目测是属性加上了但是:关于opacity属性的探究

依旧是这个鬼样子!!!!难道是药效不够?于是关于opacity属性的探究

尝试1 —结论:失败,opacity属性不受z-index影响他是最贴近我们脸上的一层东西

问题还在尝试继续

尝试性解决2:把opacity属性放到同级元素实现

于是有了如下改动我就直接上完整代码啦,要下班咯?

css部分:

<style>
        .boxfather {
            
            width: 500px;
            height: 500px;
            background-color: blue;
            text-align: center;
            padding: 100px;
            box-sizing: border-box;
            opacity: 0.5;
            position: absolute;
            z-index: 1;
        }
        .boxson {
           
            width: 300px;
            height: 300px;
            background-color: green;
            padding: 100px;
            box-sizing: border-box;
            position: absolute;
            top: 20%;
            left: 7%;
            z-index: 500;
        }
        .boxgrandson {
           
            width: 100px;
            height: 100px;
            background-color: yellow;
            position: absolute;
            z-index: 1000;

        }
</style>

HTML部分:

<body>
    <div class="boxfather">
    </div>
    <div class="boxson">
        <div class="boxgrandson">
        </div>
    </div>
</body>

神奇的事情发生了!!!这个时候生效了!!!

关于opacity属性的探究

但是我又有了新的质疑到底和层级有没有关系于是我们刻意的提高.boxfather的层级不可思议的事情又发生了

现在的层级关系是关于opacity属性的探究

效果:关于opacity属性的探究

哇哇哇。。。。。。。。。。。要疯(不行我还不能疯)

分析:因为最上层是蓝色的!!不设置透明的时候应该看不到下层的!!

          正因为加上了opacity属性所以才会使另外两个按起来变了色!!

          也就是说我们黄色的盒子绿色的盒子是在0.5透明度的蓝色滤层下展示了现在这个奇奇怪怪的颜色

很简单的原理嘛,差点轻易的疯掉了?



好了总结一下:

1、透明度opacity属性确实没有继承性!!!

2、表现出继承“性状”的原因是opacity属性生效原理类似蒙版!!

3、子元素或子盒子无论层级多高都无法突破父级元素透明度的那层阴影!!!

4、可以通过改变盒子的包含关系解决这个问题!!

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141134.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎么完全卸载赛门铁克_如何卸载symantec

    怎么完全卸载赛门铁克_如何卸载symantec前段时间,业务的虚机上安装了symantecEndpointProtection(正版),发现虚机运行一段时间就会失去响应死机,并且有些安装symantec的虚机3389端口无法使用,怎么折腾都不行。最后决定卸载它。一、是否可以用停止服务和终止进程再卸载的方式卸载呢?答案不行有3个symantec的服务,前2个可以终止,但symantecEndpointProtection这个服务打开都…

    2022年6月12日
    85
  • java list 转json 字符串_Java之JSON字符串与List集合之间相互转换

    java list 转json 字符串_Java之JSON字符串与List集合之间相互转换packagecom.crt.service.atom;importjava.util.ArrayList;importjava.util.List;importcom.alibaba.fastjson.JSON;importcom.crt.model.coupon.CouponInputDTO;/***@ClassName:TestJsonToString*@date:2017…

    2022年10月18日
    3
  • 因存储过程参数类型不匹配而造成OleDbCommand的不可用(一) (转)[通俗易懂]

    因存储过程参数类型不匹配而造成OleDbCommand的不可用(一) (转)[通俗易懂]因存储过程参数类型不匹配而造成OleDbCommand的不可用(一)(转)[@more@]因存储过程参数类型不匹配而造成OledbCommand的不可用XML:namespaceprefix=ons=”urn:…

    2022年5月19日
    30
  • json字符串数组转json数组

    json字符串数组转json数组当需要把一串字符串转成一个json数组,并遍历其中的内容时。首先要导入net.sf.json.JSONArray和net.sf.json.JSONObject两个jar包<dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><c

    2022年6月21日
    105
  • windows 设置定时锁屏

    windows 设置定时锁屏设置间隔指定时间电脑自动锁屏CreateTime–2017年7月3日10:16:14Author:Marydon参考地址:电脑爱好者杂志举例:实现每间隔45分钟,电脑自动锁屏实现思路:  第一步:编写锁屏命令;  第二步:制定计划。实践:  1.编写锁屏命令    新建一个txt文件,重命名为:lockScreen(名字随意)–>打开该文件添…

    2022年7月21日
    57
  • Java面向对象三大特性(封装、继承、多态)

    Java面向对象三大特性(封装、继承、多态)文章目录前言一、封装1.封装的概念2.private实现封装3.getter和setter方法4.封装的好处二、继承1.extends实现继承2.super关键字三,多态总结前言OOP语言:也就是面向对象编程。面向对象的语言有三大特性:封装、继承、多态。三大特性是面向对象编程的核心。下面就来介绍一下面向对象的三大特性。如果想了解面向对象可以看一下这一篇博客类和对象一、封装1.封装的概念在我们写代码的时候经常会涉及两种角色:类的实现者和类的调用者封装的本质就是让类的调用者不必太多的.

    2022年7月25日
    14

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号