1

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

4

1 回答 1

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,或者使用手写笔的 javascript API 和use. 触控笔使用:

td
  color longColor(#333)
于 2012-02-21T14:05:45.133 回答