所有LESS文档和教程都使用#namespace> .mixin()语法何时进入名称空间。但是我发现自己更熟悉.namespace.mixin()语法,即:
.namespace() {
.mixin() {
foo: bar;
}
}
#usage {.namespace.mixin()}
我错过了什么吗?这两个变体之间是否存在任何差异(在partucular中,mixins /变量影响范围的方式,反之亦然)?或者它只是某种历史根源的传统?
你是对的,“。namespace> .mixin”,“。namespace.mixin”和“.namespace .mixin”在用作选择器时是不同的野兽。但是当它进入mixin调用/扩展时,事情似乎有些不同。我不能在下面写一个例子:
"#usage {#namespace > .mixing}"
"#usage {#namespace.mixing}"
"#usage {#namespace .mixing}"
等。假设.mixin被定义为参数规则集,则产生不相等的输出。 “.namespace”也是如此。 E.g:
/* 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个结果似乎相等。
我不知道它是否意图是轻微的行为,“语言黑暗的角落”或...... 但这就是为什么我更喜欢使用“.namespace.mixin()”语法而不是“#namespace> .mixin()” (如果我理解正确,如果当前的工作方式是预期的行为 - 假设“less.js 1.4.x”): 严格来说,LESS中没有“命名空间”或“混合”这样的东西,这些只不过是“逻辑抽象”。只有规则集可以是参数化和非参数化的。规则集可以作为命名空间,mixin或两者,具体取决于我们定义和调用它的方式。
所以我原来的问题实际上是两个:
在编写上述所有内容时,我认为最好通过在“.namespace”定义中添加一个空的parens来纠正我的原始示例,以强调它是一个显式可调用的实体,而不是任何方式的选择器。 / p>
答案 0 :(得分:3)
.namespace.mixin
是指包含两个类的元素,而.namespace .mixin
会在.namespace中找到所有.mixins,或者只是一个错字?
答案 1 :(得分:1)
更新:我在官方的less.js问题列表https://github.com/less/less.js/issues/1205中找到了类似的主题(即使有更全面的示例/测试列表)。 这似乎就像最初无意识的语法倾向于保持“原样”:
令人惊讶..但我猜人们很可能会依赖这一点,如果我们打破它就不会高兴:(