2013-08-24 37 views
1

所有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”,那些不再是“逻辑抽象”。只有规则集可以是参数和非参数。根据我们定义和调用它的方式,规则集可以充当名称空间,混合或。

所以我原来的问题实际上是两个:

  1. 使用的“>”(这是我的主要关注):如果它是在调用的时候真的redundand /在“呼吁”一个mixin(不同于“>”选择器) - 放下它。 “#”与“。”:如果嵌套的“mixin”也可以作为命名空间(并且只有在定义为“dot规则集”时才有可能),为什么我们要用“#”来声明顶级命名空间? “? 换句话说,如果我们可以使用“.ruleset1.ruleset2.ruleset3.ruleset4.etc()”,但不能使用“#ruleset1>#ruleset2>。etc()”为什么只将后一种语法用于两级别扩张? (除了我们确实需要在id选择器内部混合的情况)。

在写这一切之上,我认为这将是更好的通过添加一个空括号的“.namespace”的定义来纠正我原来的例子来强调实际上它是一个明确的可调用实体,而不是一个选择器以任何方式。

回答

1

更新:我在官方的less.js问题列表中发现了类似主题(即使有更全面的示例/测试列表):https://github.com/less/less.js/issues/1205。 这似乎是像最初意外语法倾向于留“原样”:

奇怪..但我想人们都极有可能依靠这一点,并不会幸福,如果我们打破它:(

3

.namespace.mixin是指两个类的元素,而.namespace .mixin会找到.namespace中的所有.mixins,还是只是一个错字?

+0

你说得对,“.namespace> .mixin”,“.namespace.mixin”和“.namespace .mixin”是用来作为选择器的不同动物,但事情似乎是不一样的, invoke/expansion。 ..我的回答对于评论来说太长了,所以我将它附加到我的原始问题 - 参见上面... –