You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SCSS循环根据实际项目数量生成类而非固定5个?

解决SCSS循环适配任意数量item的问题

方法一:用Sass变量动态控制循环范围

把原代码里固定的5换成可配置变量,调整项目数量时只需修改变量值,就能自动生成对应数量的样式类:

// 根据实际项目数量修改这个变量
$total-items: 6;

@for $num from 1 through $total-items {
  .item-#{$num} {
    transform-origin: top center;
    animation: rotateX 300ms ($num * 60ms) ease-in-out forwards;
  }
  .item-#{$num} + .item-last {
    transform-origin: top center;
    animation: rotateX 300ms (($num + 1) * 60ms) ease-in-out forwards;
  }
}

// 补充rotateX动画定义(根据需求调整最终状态)
@keyframes rotateX {
  to {
    transform: rotateX(0deg);
  }
}

比如要做8个item,就把$total-items改成8,循环会自动生成.item-1到.item-8的样式。

方法二:用CSS自定义属性+JS适配任意数量(无需预定义循环)

如果不想每次修改Sass变量,可通过CSS自定义属性结合JS动态计算索引,彻底摆脱固定循环的限制:

先调整HTML结构(无需手动加索引类):

<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<!-- 可无限添加更多item -->
<div class="item-last">最后一项</div>

再写通用CSS样式:

.item {
  transform-origin: top center;
  animation: rotateX 300ms calc(var(--item-index) * 60ms) ease-in-out forwards;
}

.item + .item-last {
  transform-origin: top center;
  animation: rotateX 300ms calc((var(--item-index) + 1) * 60ms) ease-in-out forwards;
}

@keyframes rotateX {
  to {
    transform: rotateX(0deg);
  }
}

最后用JS给每个item动态设置索引变量:

document.querySelectorAll('.item').forEach((itemEl, index) => {
  // 索引从1开始,和原代码逻辑保持一致
  itemEl.style.setProperty('--item-index', index + 1);
});

这种方式不管加多少个item,JS都会自动计算索引,CSS根据索引生成对应动画延迟,完全适配任意数量的项目。

内容的提问来源于stack exchange,提问作者Kitten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 04:06:26