【问题标题】:Colour maths: effect of transparent black overlay on lightness颜色数学:透明黑色覆盖对亮度的影响
【发布时间】:2014-03-14 11:26:31
【问题描述】:

我最近一直在玩SASS,发现darken 函数非常有用,它通过将颜色的HSL“亮度”分量减少给定量来工作。有一次,我最终尝试在以下上下文中将半透明黑色覆盖转换为等效的darken 应用程序:

  • 容器背景:$color(任何颜色)
    • 内容背景:darken($color, 20%)(暗 20%)
      • 标题背景:rgba(0, 0, 0, 0.2)(20% 不透明度黑色覆盖)

我原以为我可以用darken($color, 36%) 替换标题背景(80% 亮度 × 80% 亮度 = 64% 亮度),但那要暗得多。产生视觉上相似结果的值约为 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/

【问题讨论】:

    标签: css colors sass


    【解决方案1】:

    您要改用的函数是mix()。由于您的黑色是 80% 透明(20% 不透明),因此您需要调整混合物的重量以支持第一种颜色。

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

    【讨论】:

    • 绝对可以!我仍然有兴趣看看混合黑/白和变暗/变亮之间是否存在关系,所以我暂时将其保持打开状态。
    • 您的原始问题已得到解答,您拥有进一步调查所需的信息。如果你想问一个不同的问题,那就问一个不同的问题。
    • 您提供了半透明黑色覆盖层的功能替代方案,但是我的问题“如何将半透明黑色覆盖层转换为等效的亮度降低”尚待回答。
    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2013-09-15
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多