クライアント側でより少ない変数を変更したいと思います。ファイルが少ないとしましょう
@color1: #123456;
@color2: @color1 + #111111;
.title { color: @color1; }
.text { color: @color2; }
ユーザーが色を選択して@ color1の値を変更し、ページをリロードせずにcssを再コンパイルするようにします。
基本的に私はこのようなjs関数を探しています
less_again({color1: '#ff0000'})
Less.jsの作成者は、このようなことを可能にするいくつかの機能を追加しました。ここでコメントと回答を読んでください: less.jsルールを動的にロードします
マーヴィン、昨夜、あなたが探しているものを正確に実行する関数を書きました。
Githubでフォークを作成しました。 https://github.com/hbi99/less.js/commit/6508fe89a6210ae3cd8fffb8e998334644e7dcdc
それを見てください。これは最近の追加ですので、追加についてのコメントをお願いします。このソリューションは私のニーズに完全に適合しており、あなたにも同じことができると思います。
これが基本的なサンプルです。
@bgColor: black;
@textColor: yellow;
body {background: @bgColor; color: @textColor;}
less.modifyVars({
'@bgColor': 'blue',
'@textColor': 'red'
});
これ以下:
@color1: #123456;
@color2: @color1 + #111111;
.title { color: @color1; }
.text { color: @color2; }
このCSSにコンパイルされ、これがブラウザが知っているすべてです。
.title { color: #123456; }
.text { color: #234567; }
つまり、これに動的に変更したいということです。
.title { color: #ff0000; }
これを行うには、JSを使用して既存のスタイルシートにアクセスし、.title
のルールを変更します。または、元のCSSで代替ルールを定義できます。
.alternate.title { color: #ff0000; }
そして、.titleを持つすべてのオブジェクトを見つけて、それらに.alternateを追加します。 jQueryでは、これは次のように簡単です。
$(".title").addClass(".alternate");
プレーンJSでは、シムを使用してクロスブラウザー方式でgetElementsByClassNameを提供してから、次を使用する必要があります。
var list = document.getElementsByClassName("title");
for (var i = 0, len = list.length; i < len; i++) {
list[i].className += " alternate";
}