所以我使用IE特定的过滤器,要求颜色为6个字符的长形式。但是我有一千个样式表填充了使用3个字符的简短形式调用我的函数。所以我希望可以在函数内从短形式转换为长形式。任何内置或自定义功能都可以。我的功能看起来像这样:
td_gradient(color1, color2)
background-color (color1 + (color2 - color1) / 2)
background -webkit-gradient(linear, 0% 0%, 0% 100%, from(color1), to(color2))
background -webkit-linear-gradient(top, color1, color2)
background -moz-linear-gradient(top, color1, color2)
background -ms-linear-gradient(top, color1, color2)
background -o-linear-gradient(top, color1, color2)
filter s("progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorstr='%s', EndColorstr='%s')", color1, color2)
输入颜色看起来像#333
和#123
,但Microsoft过滤功能需要#333333
和#112233
。有没有办法在不编辑样式表中的每个实例或颜色的情况下满足它?
答案 0 :(得分:4)
查看手写笔源代码,在lib / nodes / rgba.js中,有这个方法:RGBA.prototype.toString。在第268行,我们发现:
if (r[0] == r[1] && g[0] == g[1] && b[0] == b[1]) {
return '#' + r[0] + g[0] + b[0];
} else {
return '#' + r + g + b;
}
我尝试为你构建一个函数,但我似乎无法将颜色作为字符串返回,以进行字符串操作。因此,最简单的方法可能是修补RGBA.prototype
并删除此缩短。
更新:好的,这是一个适合您的功能:
module.exports = function() {
var hex = function(n) { return n.toString(16) };
return function(style) {
style.define('longColor', function(color) {
return '#' + [color.r, color.g, color.b].map(hex).join("");
});
}
};
如果您将其放在文件color.js
中,则可以将其与stylus -u ./color.js
或手写笔'一起使用。带有use
的JavaScript API。手写笔用法:
td
color longColor(#333)