首页 文章

颜色数学:透明黑色覆盖对亮度的影响

提问于
浏览
0

我最近一直在玩SASS,并且找到了darken函数,它通过将颜色的HSL "lightness"组件减少给定量来工作,这非常有用 . 有一次,我最终尝试在以下上下文中将半透明黑色叠加转换为等效的 darken 应用程序:

  • 容器背景: $color (任何颜色)

  • 内容背景: darken($color, 20%) (20%更暗)

  • Headers 背景: rgba(0, 0, 0, 0.2) (20%不透明度黑色叠加)

我以为我可以用 darken($color, 36%) (80%亮度×80%亮度= 64%亮度)替换 Headers 背景,但是更暗 . 产生视觉上类似结果的值约为25% .

显然,100%不透明度等于0%亮度,0%不透明度等于100%亮度,但在那之间,比例似乎是透明度线性的......而不是亮度(由于基本上从亮度分量中减去变暗) .

所以,我的问题是如何将半透明的黑色叠加转换为相当于亮度的减少?它甚至可能吗?

这是一个小提琴我的意思的例子:http://jsfiddle.net/R7aYP/2 - 我有兴趣找到一个公式来计算 .box.three 的黑暗百分比来自 .box.two 的不透明度 .

编辑:

@cimmanon提到mix函数可用于创建与 mix($color, black, 80%) 相同的效果 - 这是混合和变暗/变亮之间的关系 .

编辑:

我意识到这实际上是微不足道的, darken 函数只是减去绝对值,例如:

darken(blue, 20%) = hsl(hue(blue), saturation(blue), lightness(blue) - 20)

混合黑色是减少百分比,所以:

mix(blue, black, 80%) = darken(blue, lightness(blue) * 0.2)

一个强制性的小提琴:http://jsfiddle.net/R7aYP/4/

1 回答

  • 1

    您要使用的功能是 mix() . 由于你的黑色是80%透明(20%不透明),你需要调整混合物的重量,而不是第一种颜色 .

    .foo {
        background: mix(blue, black, 80%);
    }
    

相关问题