2012-02-21 8 views
1

私は6色の長い形式で色を必要とするIE固有のフィルタを使用しています。しかし、私は、3行の短い形式を使用して関数に呼び出しを書き込んだ1000行のスタイルシートを持っています。だから私は、関数内から短い形式から長い形式に変換することが可能であることを望んでいる。組み込み関数またはカスタム関数が行います。ショートフォームカラー(#123)をスタイラスのロングフォーム(#112233)に変換できますか?

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のように見えるが、マイクロソフトのフィルタ機能が#333333#112233が必要です:My機能は次のようになります。スタイルシートのすべてのインスタンスや色を編集せずにそれを満たす方法はありますか?

答えて

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にパッチを当て、この短縮を取り除くことです。

UPDATE: [OK]を、ここでの機能はあなたのためである:

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に入れた場合、あなたはusestylus -u ./color.js、またはスタイラスのJavaScript APIでそれを使用することができます。スタイラスの使用量は:color.r <(

td 
    color longColor(#333) 
+0

これはおそらく、これを達成する最良の方法ですが、私は私のCSSを通過すると、 'のような何かについて#343434など – Hubro

+1

何に#333のすべてのインスタンスを変更することになりました<16 | color.g << 8 | color.b).toString(16) '? – alex

+0

これは本当に役に立ちましたが、私が必要としていたものにはまったく完璧ではありませんでした。それは先行ゼロを削除し、ダブルゼロを1つの0に変換しました。いくつかの古いIEフィルタには6桁の16進数の色が必要でしたので、これを少し変更しなければなりませんでした。 [https://gist.github.com/FranciscoG/b9d4ad3bcd1ccab168d7](https://gist.github.com/FranciscoG/b9d4ad3bcd1ccab168d7) – Francisc0

関連する問題