Css Sass/Compass Mixin用于在不透明度/RGBA后确定颜色

Css Sass/Compass Mixin用于在不透明度/RGBA后确定颜色,css,sass,compass-sass,Css,Sass,Compass Sass,我正在使用一个类似rgba的(“#2f305a',0.8),它工作得很好,但我想更进一步。我需要使不透明度后的颜色显示为相同的颜色,好像它是固体。我想我看到了一个函数,它在前一段时间实现了这一点,但似乎找不到它。那里有我们的还是有人有?我尝试了转换,并做了以下操作: @function alphaCalc($desiredColour, $desiredAlpha, $backgroundColour: white) { $r3: red($desiredColour); $g3

我正在使用一个类似rgba的(“#2f305a',0.8),它工作得很好,但我想更进一步。我需要使不透明度后的颜色显示为相同的颜色,好像它是固体。我想我看到了一个函数,它在前一段时间实现了这一点,但似乎找不到它。那里有我们的还是有人有?我尝试了转换,并做了以下操作:

@function alphaCalc($desiredColour, $desiredAlpha, $backgroundColour: white) {
    $r3: red($desiredColour);
    $g3: green($desiredColour);
    $b3: blue($desiredColour);

    $r2: red($backgroundColour);
    $g2: green($backgroundColour);
    $b2: blue($backgroundColour);

    $r1: ($r3 - $r2) / $desiredAlpha + $r2;
    $g1: ($g3 - $g2) / $desiredAlpha + $g2;
    $b1: ($b3 - $b2) / $desiredAlpha + $b2;

    @return rgba($r1, $g1, $b1, $desiredAlpha);
}

.someEl {
    background-color: alphaCalc(#2f305a,0.8);
}
问题是我得到了一个错误: “$red:颜色值-5对于“rgba”必须介于0和255之间”

r3=47;r2=255;r1=(47-255)/0.8+255=-5


看来公式是错的,还是我遗漏了什么?有人有解决方案吗?

要确保始终使用正数,您需要使用
abs()
功能:

@return rgba(abs($r1), abs($g1), abs($b1), $desiredAlpha);

澄清一下:如果将半透明的红色元素覆盖在蓝色元素上,您希望红色元素的值更红但仍然透明或紫色且不透明?因此,如果红色覆盖在蓝色上,则只有在透明的情况下,它看起来仍然像相同的红色。尝试对最终结果使用
abs()
函数(例如
abs($r1)
)然后看看这是否能给你想要的效果。是的,我在玩它,它看起来颜色正确,但它的不透明度看起来是1,而不是实际的,我错了。对我正在测试的东西有背景。谢谢