为什么css红绿蓝三种颜色叠加不是黑色呢?

  • 效果
    image.png
  • 测试代码
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

<div class="x">
<div class="a item"></div>
<div class="b item"></div>
<div class="c item"></div>
</div>

</body>
<style>
.x{
    width: 500px;
    height: 500px;
    /*background-color: red;*/
    margin: 200px;
    border:1px solid black;
    position: relative;
}
.item{
    width: 100px;
    height: 100px;
    opacity: 0.33333;

}
.a{
    background-color: red;
}
.b{
    background-color: green;
    margin-top:-20px;
}
.c{
    position: absolute;
    left: 80px;
    top:0;
    background-color: blue;
}
</style>
</html>
阅读 8.1k
5 个回答

首先,你这样的测试是不对的,三个元素叠加不是色彩叠加,是覆盖,就好比三种颜色的盒子放一起颜色会混合吗?其次,光学三原色叠加不是黑色是白色,黑色是颜料叠加的结果。想看真正的混合结果参考这个:
https://developer.mozilla.org...

RGB是加色法,加色法是能量叠加
即色基的光谱能量分布随能量比例增加,是能量强度的线性叠加。

其中,RGB可描述规定能量以下的所有光色,包括无能量的纯黑。显示屏模拟的是三个假想的基色灯以不同能量辐射的效果

CMYK是减色法,减色法是密度叠加
即染料的谱吸收特性固定不变,在固定的光源下染料密度变化,从而产生反射能量的对数变化,所以相当于是对数叠加再反相。

其中,CMYK仅能描述介质的某个密度范围,无法记录密度无限大的纯黑。显示屏模拟的是在某个固定光照下产生的反射稿的效果。

CMYK 和 RGB 这两种色彩模式本质与区别在哪?

不太懂,但是感觉可能是opacity设置为0.3的原因,opacity应该是不能像颜色那样子叠加的,红色*0.3就不是红色了


刚查了下,css3有个blend-mode属性,其中的multiply应该可以满足你的要求:
image.png

默认的设置透明度进行颜色叠加是一种加权平均的叠加模式,既不是光的叠加方式也不是颜料的叠加方式
blend-mode:screen(css)/ctx.globalCompositeOperation = 'screen'(canvas)可以达到光叠加的效果
blend-mode:multiply(css)/ctx.globalCompositeOperation = 'multiply'(canvas)可以达到颜料叠加的效果
https://developer.mozilla.org...
https://developer.mozilla.org...

你这个测试方法不对啊,要保证不是覆盖,你如果加了透明色,那就不是完整的红色了

推荐问题
宣传栏