zoukankan      html  css  js  c++  java
  • opacity与rgba

    前言:昨天被面试官问到了opacity和rgba的区别,突然想起很久以前遇到的一个有关这方面的问题。本文先讲解两者的区别,再来结合这个问题说说两者的应用场景。

    区别一

    opacity和rgba最大的区别:opacity具有继承性,rgba不具有继承性。

    image     image

    区别很明显,左图中红色的子元素继承了父元素的不透明度opacity,右图子元素未继承父元素的不透明度。有一点需要注意的是,子元素的不透明不仅仅是继承自父元素,其最终显示的值为:子元素的不透明=父元素opacity*子元素opacity

    image    image

    从右图可以看出,当减少子元素的不透明度时,子元素的背景色变浅了。为了更清楚了证明子元素的不透明=父元素opacity*子元素opacity,我们来看下面的对比:

    image  image

    咦,怎么子元素此时的不透明都为0.2,但是看起来不一样?这是由于子元素背景色与子元素的背景色重叠在一起导致看上去不一样,我们可以通过getComputedStyle()方法来看看此时子元素的opacity。(getComputedStyle可以获得元素当前样式的计算值)

    var style = document.defaultView.getComputedStyle(son, null);
    console.log(style.opacity);

    大家可以试一试,两种情况opacity都为0.2,说明子元素的不透明=父元素opacity*子元素opacity。其实也可以把元素的背景色设为白色,这样就不会影响子元素的视觉效果了。大家可以试一试,这里就不放图了。

    区别二

    opacity是对整个元素起作用,也就是会对元素的字体颜色,边框,背景等均设置不透明度;rgba只会对相应的属性起作用,比如background设置了rgba,就只会对背景起作用,而不会影响边框、字体的颜色。

    image    image

    有关问题

    这里说说我之前遇到的一个问题,这个问题很常见,就是类似实现以下蒙层的效果:

    image

    简单实现了一个,蒙层的核心结构及样式如下:

    <div id="mask">
       <div id="button">
         登录
       </div>
     </div>
    #mask{
          opacity: 0.3;
          background: black;
        }

    image

    可以发现,我们可以透过登录box看到背景中的字。通过以上的讲解,解决这个问题就很简单了,只要将蒙层由opacity改为rgba即可。

    #mask{
          background: rgba(0,0,0,0.3);
        }

    image

  • 相关阅读:
    ssd 的anchor生成详解
    Qt小技巧8.利用反射机制通过类名创建Qt对象
    项目经验2.需求才是王道
    Qt实战12.可自由展开的ToolBox
    Qt实战11.进程窗口集成之假装写了个第三方软件
    Qt小技巧7.Qt4集成fusion风格
    Qt杂谈3.快速体验Qt for Android(windows平台)
    Qt实战10.支持最小化和最大化的QDockWidget
    gitlab 拉取远程分支代码
    CentOS7下用jdk1.7编译hadoop-2.7.1全过程详解
  • 原文地址:https://www.cnblogs.com/youhong/p/7351928.html
Copyright © 2011-2022 走看看