您可以编写特定于参数的 mixin 而不是使用守卫,例如:
.set-logo-colors(ab) {
@first-color: red;
@second-color: green;
@third-color: blue;
}
.set-logo-colors(bc) {
@first-color: orange;
@second-color: blue;
@third-color: gray;
}
这将在您传递正确的参数时执行。
为了详细说明这种方法,您可以执行以下操作:
.logo(@product) {
.set-logo-colors(@product);
.build-logo(@product, 200px);
}
让我们说 build-logo 看起来像这样
.build-logo(@a, @b) {
product: @a;
width: @b;
color: @first-color;
}
通过调用
.logo(ac);
你得到:
product: ab;
width: 200px;
color: #ff0000;
不止一种产品:
会有一个问题,如果你调用多个产品,颜色变量将已经设置并且
.logo(bc);
将返回:
product: bc;
width: 200px;
color: #ff0000;
这不是我们想要的。
所以最好从一组多参数 mixins开始:
.build-logo(@a, @b, @color1, @color2, @colo3) {
product: @a;
width: @b;
color: @color1;
}
.logo(ab, @size) {
.build-logo (ab, @size, red, green, blue);
}
.logo(bc, @size) {
.build-logo (bc, @size, green, orange, gray);
}
现在打电话
.logo(ab, 200px);
给出与上面相同的输出,但在为另一个产品调用它时它不会重叠/覆盖任何东西。所以:
.logo(bc,200px);
返回:
product: bc;
width: 200px;
color: #008000;