请问这种less样式应该怎么写?

发布于 2022-09-12 02:27:58 字数 446 浏览 10 评论 0

问题是这样:less文件里面定义了一个类似这样的

@padding-list: 10, 10.5, 20, 20.5;  

的一个列表,想用less循环得到 .p-10px 这样的类名,代码长这样

.generateSpacing(@i) when (@i < (length(@padding-list) + 1)) {
  .paddingGenerator(@i+1);
}

.paddingGenerator(@size) {
  .p-@{size}px {
    padding: unit(@size, px);
  }
}

但是当取到值为10.5的时候发现 .p-10.5px 这样的类名是不可能存在的,如果是整数还是能直接写到类名上面,现在小数是不行的,所以想替换成 .p-10dot5px,这个时候我应该怎么改?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

嘴硬脾气大 2022-09-19 02:27:58

我记得 LESS 是有 replace 函数的,你可以试试。

无言温柔 2022-09-19 02:27:58

感谢上面那位码友提供的思路,目前已经实现了,如果有更好的方案或者觉得我写的还有什么改进的地方,欢迎交流,代码大概长这样:

/* 生成百分比高度类名 */
.generatePercentageHeight(@i) when (@i < (length(@percent-height-list) + 1)) {
  .percentageHeights(extract(@percent-height-list, @i));
  .generatePercentageHeight(@i + 1);
}

.percentageHeights(@size) {

  /* 整数部分 */
  @integer-part: if(floor(@size) > 0, floor(@size), ~'');
  /* 小数部分 */
  @fractional-part1: @size - floor(@size);
  /* 转换为字符串,并替换掉字符串中的 '0.' */
  @fractional-part2: replace('@{fractional-part1}', '0[.]', '');
  /* 将上一步获取到的结果转换可以作为名称的变量 */
  @fractional-part: ~'@{fractional-part2}';

  /**
   * 如 0.5,最终生成的结果是
   * .h-dot5 {
   *    height: 0.5%;
   * }
   * 如 10.5,最终生成的结果是
   * .h-10dot5 {
   *    height: 10.5%;
   * }
   */
  .h-@{integer-part}dot@{fractional-part} when (@size > floor(@size)) {
    height: percentage(@size / 100);
  }

  .h-@{size} when (@size = floor(@size)) {
    height: percentage(@size / 100);
  }

}

:global {
  .generatePercentageHeight(1);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文