apply color function on evaluated string color

后端 未结 1 973
半阙折子戏
半阙折子戏 2020-12-20 06:59

I have loop in less which is iterating throw numbered variables with colors. It\'s working fine when I need just evaluate color but not when I want also change color with fu

相关标签:
1条回答
  • 2020-12-20 07:10

    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.
    
    1. @clr: "@{@{prefix}-@{index}}"; - Just for reducing the complexity of the next line. This evaluates to "#00c409" for @cat-1.
    2. color(~"`function(){return @{clr}}()`") - Converts the string into a color value that can be used within the darken function.
    3. 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%);
    
    0 讨论(0)
提交回复
热议问题