动画可以为网页增添互动性和吸引力,但如何高效管理动画效果并保持代码简洁?本文介绍一种基于@keyframes
的动画系统,支持淡入、弹出、延迟等效果,适用于元素入场动画。
基础淡入动画
通过opacity
属性实现元素的渐显效果:
.animate {
animation-duration: 0.5s; /* 动画时长 */
animation-name: animate-fade;
animation-delay: 0.5s; /* 延迟启动 */
animation-fill-mode: backwards; /* 保持初始状态直到动画开始 */
}
@keyframes animate-fade {
0% { opacity: 0; }
100% { opacity: 1; }
}
弹跳式入场动画
结合transform: scale()
实现元素从小到大的动态弹入效果:
.animate.pop {
animation-name: animate-pop;
animation-timing-function: cubic-bezier(.26, .53, .74, 1.48); /* 贝塞尔曲线控制弹跳感 */
}
@keyframes animate-pop {
0% {
opacity: 0;
transform: scale(0.5); /* 初始缩小至50% */
}
100% {
opacity: 1;
transform: scale(1); /* 恢复原尺寸 */
}
}
交错延迟动画
通过类名控制多个元素的动画启动顺序,形成交错的视觉效果:
.delay-1 { animation-delay: 0.6s; }
.delay-2 { animation-delay: 0.7s; }
.delay-3 { animation-delay: 0.8s; }
动画系统优势
-
模块化:通过类名组合(如
.animate.pop
)复用动画逻辑,减少重复代码。 -
可扩展性:可轻松添加新动画类型(如滑动、旋转)并定义对应的
@keyframes
。 -
性能优化:使用
transform
和opacity
属性触发GPU加速,避免布局重绘410。
实际应用场景
-
列表项逐条入场:通过延迟类实现瀑布流效果。
-
按钮交互反馈:点击时触发缩放动画增强操作感。
-
模态框弹出:结合
scale()
和淡入提升视觉层次。