2011-08-29 8 views
12

Lessの中でforループを実行したいと思っています。 Lessの中でこれを行うことは可能ですか?私はそれがjsを評価する能力を持っていることを知っていますが、この程度ですか?LESS CSSの内部でJavascript forループを実行できますか?

+1

LESSは単なるCSSプリコンパイラです。最終的な結果は、単純なCSSです。私はJavascriptがどこに来るのかわかりません。 –

+2

@Pekka:LESSは、ブラウザのクライアント側とNode.js([more here](http://lesscss.org/))を介してサーバー側の両方で動的に実行できます。その構文の一部は実際に(クライアント側の)JavaScript式を評価することです: '@height:\' document.body.clientHeight \ '; ' –

+0

@ T.J。ああ、あなたは何を知っていますか?興味深い、ありがとう。 –

答えて

24

チェックアウトにはTwitter Bootsrapをお勧めします。彼らはそのようにグリッドシステムを構築しています。彼らは必要なすべてのクラスを入力するのではなく、少ないミックスインで再帰でループします。

興味深い部分はmixins.lessファイルで、lessディレクトリの "// The Grid"コメント(516行目)の下にあります。興味深い部分は、次のとおりです。(特に)を生成

#grid > .core(@gridColumnWidth, @gridGutterWidth); 

.span12 { 
    width: 940px; 
} 
.span11 { 
    width: 860px; 
} 
.span10 { 
    width: 780px; 
} 
... 

bootstrap.cssをこの方法以下のディレクトリにgrid.lessファイルで呼び出され

#grid { 

    .core (@gridColumnWidth, @gridGutterWidth) { 

     .spanX (@index) when (@index > 0) { 
     (~"[email protected]{index}") { .span(@index); } 
     .spanX(@index - 1); 
     } 
     .spanX (0) {} 

     ... 

     .span (@columns) { 
     width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); 
     } 
... 

@gridColumnWidth、@gridGutterWidthおよびその他の変数のチェックvar iables.lessファイル(184行目)

最後のバージョンのlesscノードコンパイラがインストールされていることを確認してください。

+4

ありがとうございました。誰かがこれを理解するのに困っている/詳細な説明が必要な場合:http://blog.thehippo.de/2012/04/programming/do-a-loop-with-less-css/ – TheHippo

+0

私はこれをBootstrapで見ました昨夜、それが私の心を吹き飛ばし、私は自分のグリッドライブラリに実装しなければなりませんでした。非常にすばらしい! – kalisjoshua

+1

あなたはそれが役に立ちますようにうれしい@kalisjoshua!応援はいつも歓迎です:) – AlessMascherpa

2

the docsのループについては何もありませんが、あなたは、バッククォートを経由してJavaScriptの表現にアクセスすることができるので、あなたは常にあなたのスクリプト(ない自分のLESSコード内の関数を定義するが、JavaScriptでき  —は例えば、IFは、ブラウザでは、あなたがしたいです例えば、あなたのループを実行し、別script要素)を持っているし、それをアクセス:

@height: `doMyLoop()` 

それはあなたがループで達成しようとしているものに依存します。ループにCSSルールを出力させたい場合は、運が悪いと思われます。

+1

私は24 colグリッドで作成するループを作成しようとしています。基本的には、24回まで循環してグリッドクラスを作成したいと思っています。 .grid_1、.grid_2、....、.grid_24 –

+0

これは上記のAlessMascherpaで与えられた例を小さな改行で行うことができますが、出力が下がる(10,9,8 ...)と上がる(1、 2,3 ...)、それは単なる文体的なものです。 – augurone

1

これはハックですが... これをファイルに追加してください。

@testColor: green; 

unusedclass { 
    unknownprop: ~`loopCss(10,".group{{i}} { background-color: @{testColor}; }")` 
} 

次の関数でのJavaScriptファイルloopCss.jsを作成します。

function loopCss(count,cssTemplate) { 
    // end the existing unused class 
    var result = "0;}\n"; 
    // Add your custom css 
    for(var i=0; i<count; i++) result += cssTemplate.replace("{{i}}",i) +"\n"; 
    // Handle the close bracket from unused class 
    result += "unusedclass {"; 
    return result; 
} 

は、今すぐあなたのless.js前loopCss.jsが含まれており、それが動作するはずです。

関連する問題