Recommended Solution:
Actually, I made the above a lot more complicated than required. A simple option would be to just form the variable name using concatenation and then evaluate it within the darken()
function itself instead of using the ~""
(which outputs a String instead of a Color).
&:hover{
@clr: "@{prefix}-@{index}";
background-color: darken(@@clr,20%);
}
Original Answer:
Assuming I understood your query correctly, you can achieve it the below way:
@cat-1:#c40009;
@cat-2:#0009c4;
.gen-cats-filter (@index,@prefix) when (@index > 0) {
.@{prefix}@{index}{
background-color: ~"@{@{prefix}-@{index}}";
&:hover{
@clr: "@{@{prefix}-@{index}}";
background-color: darken(color(~"`function(){return @{clr}}()`"),20%);
}
}
.gen-cats-filter(@index - 1,@prefix);
}
.gen-cats-filter(2,cat); //I assumed this line was an error in your code and hence modified it.
@clr: "@{@{prefix}-@{index}}";
- Just for reducing the complexity
of the next line. This evaluates to "#00c409"
for @cat-1
.
color(~"`function(){return @{clr}}()`")
- Converts the string into
a color value that can be used within the darken
function.
darken()
- Darkens the color value.
CodePen Demo
With recent updates to the Less compiler, we can avoid the JS function bit also and directly write it as follows:
background-color: darken(color(@clr),20%);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…