セレクター内でのインポートを許可すると、コードの再利用とスタイルスコープの可能性の素晴らしいコレクションが開かれます。 何かのようなもの:
.foo{
<strong i="6">@import</strong> "bar";
}
CSSでサポートされたウィジェットのモジュールを少なくする場合に特に便利です。 たとえば、AutoRotatorとStackContainerを作成し、セレクター内にインポートをネストする機能がある場合、次のことができます。
# AutoRotator/pane.less
.pane{
border: 1px solid gray;
width: 300px;
/* etc. ... */
}
# StackContainer/pane.less
.pane{
border: 1px solid orange;
width: 200px;
/* etc. ... */
}
そして、どちらのライブラリのユーザーも、次のようなさまざまなスタイルの範囲を決定できます。
# main.less
.myRotator {
<strong i="13">@import</strong> "AutoRotator/pane";
}
# main.less
.myStack {
<strong i="14">@import</strong> "StackContainer/pane";
}
セレクターがファイル内でいかに単純に見えるかに注目してください。 これは基本的にhttp://www.w3.org/TR/css3-namespace/をシミュレートしているだけだと思い
+1 。 間違いなく役に立ちます。
+1
+1
これを追加してください!
名前空間のインポートを許可するためのダーティハックを見つけました。 次の行にコメントするだけです。
https://github.com/cloudhead/less.js/blob/master/lib/less/tree/ruleset.js#L20
と
https://github.com/cloudhead/less.js/blob/master/lib/less/tree/ruleset.js#L27
のように見えるように
// Evaluate imports
//if (ruleset.root || ruleset.allowImports) {
for (var i = 0; i < ruleset.rules.length; i++) {
if (ruleset.rules[i] instanceof tree.Import) {
Array.prototype.splice
.apply(ruleset.rules, [i, 1].concat(ruleset.rules[i].eval(env)));
}
}
//}
しかし、これがコンパイルにどのような影響を与えるのか、私にはわかりません。 Twitterのブートストラップを使用して小さなテストを行いました。
#test {
<strong i="15">@import</strong> "../../bootstrap/less/bootstrap";
}
以下にコンパイルします:
#test article,
#test aside,
#test details,
#test figcaption,
#test figure,
#test footer,
#test header,
#test hgroup,
#test nav,
#test section {
display: block;
}
...
そしてそれは私の場合はうまくいきました。 誰かがより大きなプロジェクトでこれを確認できますか?
@cloudheadインポートがルートレベルでのみ実行されるのはなぜですか? そして、なぜruleset.allowImports
常にundefined
あり、それを常にtrue
に上書きするにはどうすればよいですか? :)
ありがとう
パッチが適用されたフォークは次のとおりです。
https://github.com/marcboeker/less.js/commit/5a2bdbcdaa03b7ded032f7a484f7f9843416fe8d
チェックアウトしてnpm install less.js
を実行するだけです
-マーク
これを修正します
@cloudhead + 1&ありがとう
allowImports
は@mediaブロックに使用されます...しかし、どのブロックでも許可されるべきではない理由はないと思います。
ああ、そうです、理由がありました、それはパフォーマンスの問題です。 CLIフラグを追加できるかどうかを確認します。
完了しました。パフォーマンスへの影響はそれほど高くなかったため、デフォルトでオンになっています。無効にするオプションは--strict-imports
ありがとう! これは大きな改善です。
@marcboekerと@cloudheadに感謝します。この変更で
最も参考になるコメント
名前空間のインポートを許可するためのダーティハックを見つけました。 次の行にコメントするだけです。
https://github.com/cloudhead/less.js/blob/master/lib/less/tree/ruleset.js#L20
と
https://github.com/cloudhead/less.js/blob/master/lib/less/tree/ruleset.js#L27
のように見えるように
しかし、これがコンパイルにどのような影響を与えるのか、私にはわかりません。 Twitterのブートストラップを使用して小さなテストを行いました。
以下にコンパイルします:
そしてそれは私の場合はうまくいきました。 誰かがより大きなプロジェクトでこれを確認できますか?
@cloudheadインポートがルートレベルでのみ実行されるのはなぜですか? そして、なぜ
ruleset.allowImports
常にundefined
あり、それを常にtrue
に上書きするにはどうすればよいですか? :)ありがとう