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

时间:2012-02-21 13:08:30

标签: css node.js stylus

所以我使用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。有没有办法在不编辑样式表中的每个实例或颜色的情况下满足它?

1 个答案:

答案 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)