我需要为我的Bootstrap变量创建一个大颜色工作的函数。不幸的是,LESS不允许你创建可以像他们一样调用的函数(例如@myvar:darken(@color,20%);)。
doc站点上提供的选项是使用返回变量的mixin。当我使用变量被声明为属性值时,这对我来说效果很好,但我需要在Bootstrap variable.less文件中的许多变量上运行我的新mixin。如果我在那里多次调用mixin,它总是返回第一种颜色。
有效的部分:
.mixin(@color) {
@var: @color;
}
.caller-1 {
.mixin(blue);
color:@var;
}
.caller-2 {
.mixin(red);
color:@var;
}
CSS
.caller-1 {
color:blue;
}
.caller-2 {
color:red;
}
什么行不通:
.mixin(blue);
@color-1: @var; // My value is now blue
.mixin(red);
@color-2: @var; // My value is also blue
我以为我可以通过在mixin中构建一个独特的变量来解决这个问题,但无论如何我都找不到构建它。
.mixin(@color; @num)
@var+@{num}: @color;
}
.mixin(blue; 1);
@color-1: @var1;
.mixin(red; 2);
@color-2: @var2;
关于如何在mixin中创建变量名的任何想法或关于如何使其像LESS函数一样工作的其他想法?
答案 0 :(得分:1)
您现在无法在LESS中动态定义变量,但您可以动态定义选择器(您可能知道)。我将举一个例子,并将它应用于颜色/变量问题。
.towerMaker (@index) when (@index > 0) {
.block-@{index} {
z-index: @{index};
}
.towerMaker(@index - 1);
}
.towerMaker (7);
答案 1 :(得分:0)
变量实际上是常量,它们的范围仅基于上下文(它们出现在块中无关紧要)。由于上下文,当您在选择器块中调用它时,它才会有所不同。当您在顶层调用mixin时,您为该级别定义@var
一次,并且不会被覆盖。
如果您必须使用变量,我建议您尝试使用上下文找到解决方案。 例如,您可以尝试使用mixin guards (它实际上更简单,如下面的@ seven-phases-max所述)。这是一种在选择器的上下文之外运行mixin但仍在上下文中的方法(更新示例):& when(condition) {...}
& {
.mixin(red);
.test1 { color: @var; }
}
& {
.mixin(blue);
.test1 { color: @var; }
}
你实际上可以定义将被less.js
类型中。
你也可以调用核心JavaScript将其封装在反引号中(这也是未记录的)。它适用于小块代码和核心功能:
length: unit(`Math.log(@{value})`, px);
如果从Node.js应用程序运行Less处理器,则可以通过这种方式调用自己的函数。