我可以在手写笔中将短格式颜色(#123)转换成长格式(#112233)吗?

所以我使用了一个IE特定的filter,要求颜色是6个字符的长forms。 但是,我有一个1000行样式表填充了我的函数使用3个字符的简短forms的调用。 所以我希望可以从函数内的短格式转换为长格式。 任何内置或自定义函数都可以。 我的function看起来像这样:

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) 

input的颜色看起来像#333#123 ,但微软的过滤function需要#333333#112233 。 有什么办法来满足它,而不用编辑我的样式表中的每个实例或颜色?

查看手写笔源代码,在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; } 

我尝试了为你构build一个函数,但是我似乎无法像string那样获取颜色,来进行string操作。 所以最简单的方法可能是修补RGBA.prototype并删除这个缩短。

更新:好的,这是你的一个function:

 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或者stylus的javascript API来use 。 触笔用法:

 td color longColor(#333)