使用CSS animation与@keyframes可实现精确控制的透明度渐变,支持多阶段变化、自动播放、无限循环及复杂缓动效果,相比transition更适用于无需交互触发、需循环或组合的动画场景;通过animation-iteration-count和animation-direction可控制循环次数与播放方向,配合animation-fill-mode可决定动画结束后元素是否保持最终状态或恢复初始样式,从而创建流畅自然的视觉效果。

CSS
animation
@keyframes
opacity
要实现元素的透明度渐变,核心在于使用
@keyframes
animation
首先,我们定义一个
@keyframes
fadeEffect
opacity
0%
100%
@keyframes fadeEffect {
0% {
opacity: 0; /* 动画开始时完全透明 */
}
100% {
opacity: 1; /* 动画结束时完全不透明 */
}
}
/* 如果需要从不透明到透明 */
@keyframes fadeOutEffect {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}接着,将这个动画应用到一个HTML元素上,例如一个
div
立即学习“前端免费学习笔记(深入)”;
<div class="my-fading-element"> 这是一个会渐变透明度的元素。 </div>
然后在CSS中,为这个元素指定
animation
.my-fading-element {
animation-name: fadeEffect; /* 指定动画名称 */
animation-duration: 2s; /* 动画持续时间为2秒 */
animation-timing-function: ease-in-out; /* 动画速度曲线,平滑开始和结束 */
animation-delay: 0.5s; /* 动画开始前的延迟 */
animation-iteration-count: 1; /* 动画播放一次 */
animation-fill-mode: forwards; /* 动画结束后保持最终状态 */
}这里
animation
animation-name
@keyframes
animation-duration
animation-timing-function
linear
ease
ease-in
ease-out
ease-in-out
animation-delay
animation-iteration-count
infinite
animation-direction
normal
reverse
alternate
alternate-reverse
animation-fill-mode
forwards
backwards
both
none
通过调整这些属性,就能实现各种复杂的透明度渐变效果。
transition
animation
确实,很多人在想到透明度渐变时,首先会想到
transition
animation
transition
transition
opacity
hover
focus
transition
transition
然而,
animation
animation
0%
25%
50%
75%
100%
transition
animation
animation-delay
animation-iteration-count: infinite
transition
animation
animation
transition
举个例子,如果我想做一个“呼吸灯”效果,让一个元素的透明度周期性地从完全透明到完全不透明,再从完全不透明到完全透明,无限循环。用
transition
animation
@keyframes breath {
0% { opacity: 0.2; }
50% { opacity: 1; }
100% { opacity: 0.2; }
}
.breathing-element {
animation: breath 3s ease-in-out infinite alternate;
}这种能力是
transition
控制动画的循环次数和播放方向是
animation
animation-iteration-count
animation-direction
animation-iteration-count
这个属性决定了动画会播放多少次。
3
.element-play-thrice {
animation: fadeEffect 2s ease-in-out 3; /* 播放3次 */
}infinite
.element-loop-endlessly {
animation: fadeEffect 2s ease-in-out infinite; /* 无限循环 */
}我个人在做一些背景装饰性元素时,经常会用到
infinite
animation-direction
这个属性控制动画在每次循环时是正向播放还是反向播放。
normal
0%
100%
animation-iteration-count
.element-normal-direction {
animation: fadeEffect 2s ease-in-out infinite normal; /* 每次都从0%到100% */
}reverse
100%
0%
.element-reverse-direction {
animation: fadeEffect 2s ease-in-out infinite reverse; /* 每次都从100%到0% */
}alternate
0%
100%
100%
0%
0%
100%
.element-alternate-direction {
animation: fadeEffect 2s ease-in-out infinite alternate; /* 来回交替播放 */
}我发现
alternate
infinite
alternate-reverse
alternate
100%
0%
.element-alternate-reverse-direction {
animation: fadeEffect 2s ease-in-out infinite alternate-reverse; /* 先反向,再交替 */
}通过组合这些属性,你可以对透明度渐变的循环和方向进行极其灵活的控制,满足几乎所有动画场景的需求。
动画结束后元素的样式表现,是由
animation-fill-mode
animation-fill-mode
none
opacity: 0
opacity: 1
opacity: 0
.element-none-fill {
opacity: 0; /* 初始状态 */
animation: fadeEffect 2s ease-in-out 1 none; /* 动画结束后恢复opacity: 0 */
}forwards
opacity: 0
opacity: 1
forwards
opacity: 1
.element-forwards-fill {
opacity: 0; /* 初始状态 */
animation: fadeEffect 2s ease-in-out 1 forwards; /* 动画结束后保持opacity: 1 */
}backwards
none
opacity: 1
fadeEffect
0%
opacity: 0
backwards
opacity: 0
opacity: 0
opacity: 1
.element-backwards-fill {
opacity: 1; /* 初始状态 */
animation: fadeEffect 2s ease-in-out 1 backwards; /* 动画开始前应用opacity: 0 */
}both
forwards
backwards
animation-delay
.element-both-fill {
opacity: 1; /* 初始状态 */
animation: fadeEffect 2s ease-in-out 0.5s 1 both; /* 延迟期间应用0%样式,结束后保持100%样式 */
}理解并合理运用
animation-fill-mode
forwards
backwards
以上就是如何用css animation实现元素透明度渐变的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号