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

如何使用CSS实现两个div元素的相互淡入淡出循环切换效果?

实现两个div的循环淡入淡出切换效果

给你两种实用的实现思路,都能完成你要的「一个消失同时另一个显示」的循环淡入淡出效果:

方案一:纯CSS实现(无需JS)

这种方案适合简单的循环场景,代码简洁,不用依赖脚本。

首先调整HTML,给两个子div加统一类名方便控制:

<div id="container">
  <div class="fade-item">My great adventure</div>
  <div class="fade-item">Travel, adventure, leisure</div>
</div>

然后编写CSS,利用绝对定位让两个div重叠,再通过CSS动画实现交替淡入淡出:

#container {
  position: relative;
  width: 300px; /* 按需调整宽度 */
  height: 50px; /* 适配文本高度 */
}

.fade-item {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  opacity: 0;
  animation: fadeCycle 4s infinite; /* 4秒一个周期,无限循环 */
}

/* 让第二个元素延迟2秒启动动画,实现交替效果 */
.fade-item:nth-child(2) {
  animation-delay: 2s;
}

@keyframes fadeCycle {
  0% { opacity: 0; }   /* 开始时透明 */
  25% { opacity: 1; }  /* 1秒后完全显示 */
  75% { opacity: 1; }  /* 保持显示到第3秒 */
  100% { opacity: 0; } /* 最后1秒淡出 */
}

方案二:JavaScript + CSS实现(更灵活)

如果需要后续调整切换逻辑(比如手动触发切换、修改间隔时间),用JS控制会更方便。

HTML结构同上,先写CSS定义过渡效果:

#container {
  position: relative;
  width: 300px;
  height: 50px;
}

.fade-item {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transition: opacity 0.8s ease; /* 0.8秒完成淡入淡出,缓动效果更自然 */
}

.fade-item.hidden {
  opacity: 0;
}

再写JS代码控制循环切换:

const fadeItems = document.querySelectorAll('.fade-item');
let activeIndex = 0;

// 初始化:显示第一个元素,隐藏第二个
fadeItems[activeIndex].classList.remove('hidden');
fadeItems[1 - activeIndex].classList.add('hidden');

// 每3秒切换一次(可自行修改间隔时间)
setInterval(() => {
  // 隐藏当前显示的元素
  fadeItems[activeIndex].classList.add('hidden');
  // 切换到另一个元素
  activeIndex = 1 - activeIndex;
  // 显示新的元素
  fadeItems[activeIndex].classList.remove('hidden');
}, 3000);

你可以根据自己的需求调整动画时长、切换间隔,或者扩展到更多元素的循环效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:25:29