在“引号”中的HTML数据属性中使用LESS变量

时间:2016-11-25 16:08:48

标签: css variables sass less

我目前正在将代码从SASS转换为LESS。

我遇到以下代码行的问题:

&[data-rating = "@{counter - 0.5}"] { // THIS DOES NOT WORK

如何处理变量并从我的计数器var中减去0.5并将其放在一对引号中,以便它可以位于HTML数据属性中。

我已经包含了两个代码示例,因此您可以获取代码并运行它以查看我的结果。

SASS:

.reviews-stars {
  display: inline-block;

  @for $i from 1 through 5 {
    &[data-rating = "#{$i}"] {
      .star:nth-child(-n + #{$i}):before {
        color: green;
      }
    }

    &[data-rating = "#{$i - 0.5}"] {
      .star:nth-child(-n + #{$i}):before {
        color: red;
      }
    }
  }
}

LESS:

.looper-review-stars(@counter) when (@counter > 0) {

  .looper-review-stars((@counter - 1)); // next iteration

  &[data-rating = "@{counter}"] { // THIS WORKS
    .star:nth-child(-n + @{counter}):before { // THIS WORKS
      color: green;
    }
  }

  // THIS DOES NOT WORK IT RETURNS THE STRING "@{counter - 0.5}"
  &[data-rating = "@{counter - 0.5}"] { // THIS DOES NOT WORK
    .star:nth-child(-n + @{counter}):before { // THIS WORKS
      color: red;
    }
  }
}

.reviews-stars {
  display: inline-block;
  .looper-review-stars(5); // launch the loop
}

1 个答案:

答案 0 :(得分:1)

您可以使用下面代码段中的临时变量来执行此操作。由于选择器是字符串,我认为最好使所有数学运算远离它并在单独的语句中。

.looper-review-stars(@counter) when (@counter > 0) {

  .looper-review-stars((@counter - 1)); // next iteration

  &[data-rating = "@{counter}"] { 
    .star:nth-child(-n + @{counter}):before { 
      color: green;
    }
  }

  @temp: @counter - .5; /* temporary variable */
  &[data-rating = "@{temp}"] { 
    .star:nth-child(-n + @{counter}):before { 
      color: red;
    }
  }
}

.reviews-stars {
  display: inline-block;
  .looper-review-stars(5); // launch the loop
}