所有LESS文檔和教程在將命名空間納入命名空間時都使用#namespace> .mixin()語法。然而,我發現自己對.namespace.mixin()語法更加自如。例如:LESS命名空間:「#namespace> .mixin()」與「.namespace.mixin()」
.namespace() {
.mixin() {
foo: bar;
}
}
#usage {.namespace.mixin()}
我錯過了什麼嗎?這兩個變體之間是否有區別(特別是混合變量/變量影響範圍的方式,反之亦然)?或者它只是某種歷史根源的傳統?
你說得對, 「.namespace> .mixin」, 「.namespace.mixin」 和 「.namespace .mixin」 是不同的東西,當它們被用作選擇。但是當調用/擴展混合時,事情似乎是不一樣的。我無法制作一個示例,其中:
"#usage {#namespace > .mixing}"
"#usage {#namespace.mixing}"
"#usage {#namespace .mixing}"
等產生不等於相等的輸出,假設.mixin被定義爲參數規則集。 「.namespace」相同。 例如:
/* A */
#namespace {
.mixin1() {
foo1: bar;
.mixin1() {
foo2: bar;
}
}
.someruleset {
foo3: bar;
.mixin1 {
foo4: bar;
}
}
}
/* 1 */
#u1 {#namespace > .mixin1()}
/* 2 */
#u2 {#namespace .mixin1()}
/* 3 */
#u3 {#namespace.mixin1}
/* 4 */
#u4 {#namespace .mixin1}
/* 5 */
#u5 {#namespace.mixin1.mixin1()}
/* 6 */
#u6 {#namespace.someruleset.mixin1()}
/* B */
.namespace {
.mixin1() {
foo1: bar;
.mixin1() {
foo2: bar;
}
}
.someruleset {
foo3: bar;
.mixin1 {
foo4: bar;
}
}
}
/* 1 */
#u1 {.namespace > .mixin1()}
/* 2 */
#u2 {.namespace .mixin1()}
/* 3 */
#u3 {.namespace.mixin1}
/* 4 */
#u4 {.namespace .mixin1}
/* 5 */
#u5 {#namespace.mixin1.mixin1()}
/* 6 */
#u6 {#namespace.someruleset.mixin1()}
所有1-6個結果似乎是相等的。
我不知道它是否打算使用LESS行爲,「語言黑暗角落」或... 但是,這裏是我更喜歡使用「.namespace.mixin()」語法而不是「#namespace> .mixin ()」 (如果我正確,如果它目前的工作方式是預期的行爲理解它 - 假設‘less.js 1.4.x中’): 嚴格地說,有沒有這樣的事情‘命名空間’或在LESS中「mixin」,那些不再是「邏輯抽象」。只有規則集可以是參數和非參數。根據我們定義和調用它的方式,規則集可以充當名稱空間,混合或。
所以我原來的問題實際上是兩個:
- 使用的「>」(這是我的主要關注):如果它是在調用的時候真的redundand /在「呼籲」一個mixin(不同於「>」選擇器) - 放下它。 「#」與「。」:如果嵌套的「mixin」也可以作爲命名空間(並且只有在定義爲「dot規則集」時纔有可能),爲什麼我們要用「#」來聲明頂級命名空間? 「? 換句話說,如果我們可以使用「.ruleset1.ruleset2.ruleset3.ruleset4.etc()」,但不能使用「#ruleset1>#ruleset2>。etc()」爲什麼只將後一種語法用於兩級別擴張? (除了我們確實需要在id選擇器內部混合的情況)。
在寫這一切之上,我認爲這將是更好的通過添加一個空括號的「.namespace」的定義來糾正我原來的例子來強調實際上它是一個明確的可調用實體,而不是一個選擇器以任何方式。
你說得對,「.namespace> .mixin」,「.namespace.mixin」和「.namespace .mixin」是用來作爲選擇器的不同動物,但事情似乎是不一樣的, invoke/expansion。 ..我的回答對於評論來說太長了,所以我將它附加到我的原始問題 - 參見上面... –