2016-03-18 6 views
2

私はLessで組み込み関数をエスケープする方法は?

.linear-gradient(@params) { 
    background-image: linear-gradient(@params); 
    background-image: -webkit-linear-gradient(@params); 
    background-image: -moz-linear-gradient(@params); 
} 

を次のように

.linear-gradient(~"to left, #83111b 0, #83111b 50%, lighten(#83111b, 5%) 50%, lighten(#83111b, 5%) 100%"); 

linear-gradient次は持っているがlighten(#83111b, 5%)を脱出することが可能ですか? 私はそれを格納する変数を使用することができますが、私はその部分を避けるために好きです。

+0

全体が1つの文字列になるため、あなたはそうすることはできません。関数の値を変数に入れて、mixinのパラメータ内で使用する必要があるかもしれません( '@ color1:lighten(#83111b、5%);のように)。線形勾配(〜 "左に、#83111b 0、#83111b 50%、@ {color1} 50%、@ {color1} 100%"); ') – Harry

+0

うんうん、あなたは何かのようなことをすることはできません@ {lighten(#000、20%)} "'あなたは 'something @ {varName} 'のような変数のみを補間することができます。 – Mike

+0

他の人が同じ質問をした場合に回答を残すことができます – Huangism

答えて

1

いいえ、エスケープされた文字列内で組み込み関数を呼び出すことはできません。なぜなら、関数は呼び出し/評価されないため、単一の文字列として扱われるからです。

驚いたことに、この特殊なケースでは、一時変数が不要で、以下のようなものがあるようです。コンパイラが少なくても、すべてを連結して単一のパラメータとして扱うようです。

.linear-gradient(@params) { 
    background-image: linear-gradient(@params); 
    background-image: -webkit-linear-gradient(@params); 
    background-image: -moz-linear-gradient(@params); 
} 
a{ 
    .linear-gradient(~"to left, #83111b 0, #83111b 50%," lighten(#83111b, 5%) ~"50%," lighten(#83111b, 5%) ~"100%"); 
} 

このモデルは、多くの同様のケースでうまく機能していると思われ、無効化されないと思います。実際、スペース区切りで(カンマで区切られていないので)、末尾の余分なセミコロンも必要ありません。 (セミコロンは、コンマ区切りの値が単一のパラメータとみなされる場合にのみ必要です。これは、セミコロンまたはコンマのいずれかをミックスインパラメータセパレータとして使用できるためですが、セミコロンが存在する場合、コンマはもはやセパレータ。)


しかし、私はまだそれがより読みやすく、明確に見えますので、以下のようなものをやってお勧めします。

.linear-gradient(@params) { 
    background-image: linear-gradient(@params); 
    background-image: -webkit-linear-gradient(@params); 
    background-image: -moz-linear-gradient(@params); 
} 

a{ 
    @color1: lighten(#83111b, 5%); 
    .linear-gradient(~"to left, #83111b 0, #83111b 50%, @{color1} 50%, @{color1} 100%"); 
} 

Qwertiyによって提案されたオプションも非常に良いものですが、同じミックスインのために他の複数のパラメータがあるとき、それは1つのスペースで区切られた値にすべてを連結してしまうため@argumentsオプションに注意してください。

+1

通常の「起床して自動プレフィクサーのbla-bla-bla」をカウントします)、技術的には、この場合エスケープは必要ありません。 [例](http://less2css.org/#%7B%22less%22%3A%22.linear-gradient(%40params ...)%20%7B%5Cn%20%20バックグラウンド画像%3A%20linear (%4083params)%3B%5Cn%7D%5Cn%5Cna%20%7B%5Cn%20%20%40Color1%3A%20lighten(%2383111b%2C%205%25)%3B%5Cn%20%20直線勾配(%20left%2C%20%2383111b%200%2C%20%2383111b%2050%25%2C%20%40color1%2050%25%2C%20%40color1%20100%25%3B)% 3B%5Cn%7D%5Cn%22%7D)。 –

1

lighten(#83111b, 5%)をエスケープすることはできますか?

いいえカンマで文字列を渡す場合は、@argumentsを使用して、呼び出し側でブラケットを閉じる前にセミコロンを追加します。

.linear-gradient(@params) { 
    background-image: linear-gradient(@params); 
    background-image: -webkit-linear-gradient(@params); 
    background-image: -moz-linear-gradient(@params); 
} 

間違っ

.linear-gradient(~"to left, #83111b 0, #83111b 50%, lighten(#83111b, 5%) 50%, lighten(#83111b, 5%) 100%"); 
linear-gradientto leftですが、他の2つは rightである必要があります。

また、プレフィックス付きのバリアントを標準のプレースホルダの前に配置するとよいでしょう。

+0

さて、私は左/右のものを変更し、ルールを再配置しました。 – Huangism

関連する問題