是否可以使用可变混合名称?

时间:2010-11-10 17:26:52

标签: less less-mixins

我想要做的是创建一个带有参数的mixin,并使用一个或多个参数作为其他mixin的名称。

由于我不确定正确的术语,我将尝试通过示例解释:

@gradients{
    light:#fafafa; //Should these also be prefixed with @?
    dark:#888888;
}
@gradientBackground(@name,@height){
    background-image:url('../img/gradients/{@name}-{@height}.png'); //this works
    background-color:@gradients[@name];
}

.someBox{
    @gradientBackground(light;150);
}

//Expected result:
.someBox{
    background-image:url('../img/gradients/light-150.png'); //This works
    background-color:#fafafa; //This doesn't work.
}

图片有效,但我还没有想出如何从@gradients引用适当的颜色。这有可能吗?

1 个答案:

答案 0 :(得分:2)

我认为你根本不需要@gradients变量。只需定义您的变量:

@light:#fafafa;
@dark:#888888;

你的mixin不应该以定义变量的@开头。 mixin基本上只是一个类。

.gradientBackground(@name:@dark, @height:500){
    background-image:url('../img/gradients/{@name}-{@height}.png');
    background-color:@name;
}

举个例子,我将mixin的属性设置为@dark颜色,将高度设置为500.

然后当你想在另一个定义中使用你的mixin时,它会是这样的:

.somebox {
    .gradientBackground(@light, 150);
}

所以,当你使用mixin时,你可以保留默认值或传递新值(即:@light& 150)

希望有所帮助!