我如何在 LESS 中使用循环来创建特定的 class 排版名称?

How can I use a loop in LESS to create specific class names for typography?

我想生成 9 个排版 classes,每个排版如下:

font-size: 2rem;
line-height: 1rem;

我将对字体大小和行高使用标准印刷乘数。与其对所有这些 CSS class 进行硬编码,我想知道是否有更优雅的方式使用 LESS 在循环中生成它们。

我从另一个线程中找到了以下内容:

@iterations: 5;
.span-loop (@i) when (@i > 0) {
    .span-@{i} {
        width: ~"@{i}%";
    }
    .span-loop(@i - 1);
}
.span-loop (@iterations);

生成:

.span-5 {
  width: 5%;
}
.span-4 {
  width: 4%;
}
.span-3 {
  width: 3%;
}
.span-2 {
  width: 2%;
}
.span-1 {
  width: 1%;
}

这非常接近,但我希望我的 class 名字更多 "named"。我如何使用循环生成 classes for:

.small { }
.caption { }
.body { }
.subheader { }
.title { }
.headline { }

等...

我也不依赖 LESS,所以如果有更好的 CSS 预处理器语言,那么我很乐意改用它:)

谢谢!

文档中的示例以供进一步修改;) 对于更复杂的代码,使用 scss 比使用 less

.for(@list, @code) {
  & {
    .loop(@i: 1) when (@i =< length(@list)) {
      @value: extract(@list, @i);
      @code();
      .loop(@i + 1);
    }
    .loop();
  }
}

@elements: small, caption, body, subheader, title, headline;

.for(@elements, {
  @remfont: @i+1;
  @remline: ((@i+1) * 1.5 / 3);
  .@{value} {
    font-size: ~"@{remfont}rem";
    line-height: ~"@{remline}rem";
  }
});