transition仅适用于状态变化,无法实现循环动效;持续自动动画必须用@keyframes配合animation属性,通过定义关键帧、设置animation-name、duration、iteration-count等控制循环播放。
transition 只能处理状态变化,比如 hover 到默认、点击切换类,它本身不支持循环播放或复杂时序控制。要实现持续、自动、可重复的动效(比如呼吸灯、旋转加载、左右浮动、颜色轮播),必须用 @keyframes 配合 animation 属性。
在 CSS 中声明一个动画序列,明确起始(0%)、中间(50%)和结束(100%)的状态。浏览器会自动补间过渡。
把 keyframes 名绑定到元素上,并设置循环行为:
比如让图标轻微上下浮动,模拟“呼吸感”:
@keyframes float {
0% { transform: translateY(0); }
50% { transform: translateY(-8px); }
100% { transform: translateY(0); }
}
.icon {
animation: float 2.5s ease-in-out infinite;
}
再比如背景色渐变循环:
@keyframes bg-cycle {
0% { background-color: #ff6b6b; }
33% { background-color: #4ecdc4; }
66% { background-color: #44b5f5; }
100% { background-color: #ff6b6b; }
}
.box {
animation: bg-cycle 6s linear
infinite;
}
基本上就这些。transition 是“状态切换助手”,keyframes 才是“专业动画引擎”。需要循环、节奏、多阶段变化,直接上 animation 就对了。