【发布时间】:2011-10-04 01:58:35
【问题描述】:
我有一个十六进制颜色,例如#F4F8FB(或rgb(244, 248, 251)),我想将其转换为 as-transparent-as-possible rgba 颜色(当显示为白色时)。有道理?我正在寻找一种算法,或者至少是关于如何做到这一点的算法的想法。
例如:
rgb( 128, 128, 255 ) --> rgba( 0, 0, 255, .5 )
rgb( 152, 177, 202 ) --> rgba( 50, 100, 150, .5 ) // can be better(lower alpha)
想法?
基于 Guffa 答案的仅供参考的解决方案:
function RGBtoRGBA(r, g, b){
if((g == null) && (typeof r === 'string')){
var hex = r.replace(/^\s*#|\s*$/g, '');
if(hex.length === 3){
hex = hex.replace(/(.)/g, '$1$1');
}
r = parseInt(hex.substr(0, 2), 16);
g = parseInt(hex.substr(2, 2), 16);
b = parseInt(hex.substr(4, 2), 16);
}
var min, a = (255 - (min = Math.min(r, g, b))) / 255;
return {
r : r = 0|(r - min) / a,
g : g = 0|(g - min) / a,
b : b = 0|(b - min) / a,
a : a = (0|1000*a)/1000,
rgba : 'rgba(' + r + ', ' + g + ', ' + b + ', ' + a + ')'
};
}
RGBtoRGBA(204, 153, 102) == RGBtoRGBA('#CC9966') == RGBtoRGBA('C96') ==
{
r : 170,
g : 85 ,
b : 0 ,
a : 0.6,
rgba : 'rgba(170, 85, 0, 0.6)'
}
【问题讨论】:
-
有趣!您仍然希望它正确可见,而不是完全透明?
-
有趣的问题! stackoverflow.com/questions/2049230/convert-rgba-color-to-rgb 有一个完全相反的问题,它可能会有所帮助
-
@Mrchief - 是的,我希望颜色在显示为白色时看起来相同,但尽可能透明。
-
好问题,我一直想知道如何做到这一点,但通常会回避它;)+1
-
@e100 - 触发此问题的具体问题是stackoverflow.com/questions/6658350/…。基本上,我希望能够通过将阴影元素放在所有内容之上,从而能够在具有背景颜色的元素之上覆盖 CSS 阴影,而不会阻止点击。我也想这样做一段时间,所以我可以做一些随机的事情,比如:jsfiddle.net/qwySW/2。另外,我发现这是一个有趣的问题:)
标签: javascript colors css rgba