String 作为函数参数的LESS mixin

String 作为函数参数的LESS mixin,string,less,interpolation,mixins,String,Less,Interpolation,Mixins,现有混合器: .mixin_1 { height: 1px; } .mixin_2 { height: 2px; } .mixin_3 { height: 3px; } .function(@get) { @get(); } 电话: 结果: .a{ height: 1px; } .b{ height: 2px; } .c{ height: 3px; } 问题:怎么做?使用当前的语言规范是可能的?您当前无法直接基于变量对mixin进行动态调用。您可以将

现有混合器:

.mixin_1 {
    height: 1px;
}
.mixin_2 {
    height: 2px;
}
.mixin_3 {
    height: 3px;
}

.function(@get) {
  @get();
}
电话:

结果:

.a{
  height: 1px;
}
.b{
  height: 2px;
}
.c{
  height: 3px;
}

问题:怎么做?使用当前的语言规范是可能的?

您当前无法直接基于变量对mixin进行动态调用。您可以将
函数()
混入到“调用者”或“获取者”混入中,在其中注册可以由
函数()
混入调用的混入,如下所示(利用模式匹配):

更少

.function(@get) {
  .-(@get); //call for mixin
  //register mixins you want to call with function
  .-(mixin_1) { .mixin_1; }
  .-(mixin_2) { .mixin_2; }
}

.mixin_1 {
    height: 1px;
}
.mixin_2 {
    height: 2px;
}

#block {
    .function(mixin_1);
}
输出

.mixin_1 {
  height: 1px;
}
.mixin_2 {
  height: 2px;
}
#block {
  height: 1px;
}
.mixin_1() {
    height: 1px;
}
.mixin_2() {
    height: 2px;
}
当然,如果希望混音对css不可见,请将其更改为:

更改少(添加括号)

新输出

#block {
  height: 1px;
}
你需要它吗? 这种抽象级别有时很有用,但通常只要在mixin上进行模式匹配就足够了。你必须确定这一点。因此,通过这个简单的示例,最好简化为以下内容:

.setHeight(1) {
    height: 1px;
}
.setHeight(2) {
    height: 2px;
}

#block {
    .setHeight(1);
}
.mixin_1() {
    height: 1px;
}

.mixin_2() {
    height: 2px;
}

#block {
    .mixin_1();
}

更复杂的mixin示例可能不太容易简化,然后像您想要的那样的mixin可能会很有用。

我认为您的代码也会这样做:

.setHeight(1) {
    height: 1px;
}
.setHeight(2) {
    height: 2px;
}

#block {
    .setHeight(1);
}
.mixin_1() {
    height: 1px;
}

.mixin_2() {
    height: 2px;
}

#block {
    .mixin_1();
}
输出将是:

#block {
  height: 1px;
}
我问的是另一件事。然而,我找到了解决办法:

.function(@get) {
  .-(@get); //call for mixin
  //register mixins you want to call with function
  .-(mixin) { .mixin; }
}

#block {
    .mixin() {
        height: 1px;
    }
    .function(mixin);
}

#block {     
    .mixin() {
        height: 2px;
    }
    .function(mixin);
}
它输出的正是我想要的:

#block {
  height: 1px;
}
#block {
  height: 2px;
}

总而言之,谢谢你的帮助。

@FlamesoFF:那根本不是操作员(这就是为什么你没有找到它)。这是一个简写的混音名称。由于类/混合名中允许使用连字符(如
.red-1
),因此这只是一种很短的名称。它在这样的情况下工作得很好,您可能需要经常重复它,并且它嵌套在另一个mixin中。我实际上是从另一个堆栈溢出贡献者那里学到了这个技巧。我想链接到不会有什么害处。对不起,但不完全是这样。我对我的问题进行了编辑,使其更加详细和易懂。我理解你的问题。“模式匹配”功能是@ScottS answer使用的功能(例如,我的评论是在“what operator it is?”)的上下文中)