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

如何仅用CSS3+SASS实现n个HTML元素的依次顺序动画?

当然可以!用 CSS3 搭配 SASS 的循环功能完全能实现这个需求,不需要 JS 就能让列表元素依次淡入,而且能适配任意数量的子元素。下面给你详细拆解实现方案:

核心思路

我们先给所有列表元素设置初始透明状态,然后通过 SASS 的 @for 循环,为每个第 i 个元素计算对应的动画延迟——第一个元素延迟 0 秒(页面加载即触发),第二个延迟 1 秒,第三个延迟 2 秒……以此类推,完美实现依次淡入的效果。

完整代码示例

首先定义几个可灵活调整的 SASS 变量,方便你后续修改动画时长、间隔和元素数量:

// 可自定义的变量
$fade-duration: 0.5s;    // 淡入动画的时长
$delay-interval: 1s;      // 元素之间的动画间隔
$item-count: 5;           // 列表元素的总数量,根据实际情况修改

// 基础样式
ul {
  list-style: none;
  padding: 0;
  margin: 0;
}

li {
  opacity: 0;             // 初始状态为透明
  animation: fadeIn $fade-duration ease-in-out forwards;
}

// 淡入动画关键帧
@keyframes fadeIn {
  to {
    opacity: 1;
  }
}

// SASS 循环:为每个元素设置对应的动画延迟
@for $i from 1 through $item-count {
  li:nth-child(#{$i}) {
    animation-delay: ($i - 1) * $delay-interval;
  }
}

适配任意数量的元素

如果你的列表元素数量有变化,只需要修改 $item-count 的值就行——比如有 10 个 <li>,就把 $item-count 设为 10,循环会自动为每个元素计算正确的延迟时间。

如果你的列表是动态生成的(比如从后端渲染),只要能把元素数量传递给 SASS 变量(比如通过模板引擎或者构建工具注入),这个方案同样适用。

补充说明

SASS 本身没办法直接读取 DOM 中的元素数量,所以需要提前知道元素总数或者能动态传递这个数值。不过既然你已经掌握了 JS 实现方式,这个纯 CSS+SASS 的方案刚好可以作为无 JS 场景的替代方案,性能更优,也更简洁。

内容的提问来源于stack exchange,提问作者Andrés Root

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:18:17