1

所有 Less 文档和教程在涉及#namespace > .mixin()命名空间时都使用语法。但是我发现自己对语法更满意.namespace.mixin(),即:

.namespace() {
    .mixin() {
        foo: bar;
    }
}

#usage {.namespace.mixin()}

我错过了什么吗?这两个变体之间是否有任何区别(特别是混合/变量影响范围的方式,反之亦然)?或者它只是某种根植于历史的传统?


显然.namespace > .mixin,当它们被用作选择器时,它们是不同的野兽.namespace.mixin.namespace .mixin但是当涉及到 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 个结果似乎都是相等的。

4

2 回答 2

3

.namespace.mixin指的是具有两个类的元素,而.namespace .mixin将在 .namespace 中找到所有 .mixins,或者这只是一个错字?

于 2013-08-24T18:00:30.797 回答
1

这种行为最初并不是有意的,更像是被忽视了。然而,经过这么多年,事实证明它比有害更有用,并且在可预见的未来(或永远)没有理由和意图改变这种行为。因此,到现在(2020 年),这种行为或多或少是“官方的”。

换句话说:

  • Mixin 和命名空间可以通过idorclass 元素标识符来声明(即使用#or.前缀)
  • 对于命名空间/嵌套的 mixin 调用/调用语句,选择器的任何组合器部分(如>+空格)都将被忽略并且不会产生任何影响。例如:
#namespace.mixin();
#namespace .mixin();
#namespace > .mixin();
#namespace>    .mixin(); 
// etc. 

以上所有语句都是相同的,并且完全匹配相同的 mixin。

.namespace #mixin和其他组合相同。

于 2013-08-25T04:28:58.697 回答