CSS3动画开发中,属性繁多且容易混淆。本文按transition过渡与animation关键帧两大体系梳理核心属性、简写语法与@keyframes规则,结合悬停、入场、循环等典型场景给出代码示例与选型建议,帮助开发者快速写出流畅且可控的动画效果。

transition过渡属性与适用场景
transition用于元素从一种状态平滑切换到另一种状态,适合按钮悬停、卡片浮起、输入框聚焦高亮等交互效果。它不需要单独编写关键帧,只要元素原始样式与目标样式不同,浏览器即可自动生成过渡过程。多个属性同时过渡时,可分别声明或使用简写统一控制。
- transition-property:指定参与过渡的CSS属性,如
color、transform、opacity。 - transition-duration:控制过渡持续时间,时间越长变化越平缓。
- transition-timing-function:定义速度曲线,常用值包括
ease、linear、ease-in-out。 - transition-delay:设置过渡开始前的延迟时间。
- transition:简写属性,按顺序合并属性、时长、速度曲线与延迟,例如
transition: transform .3s ease, opacity .3s ease;。
animation关键帧属性与完整控制
animation用于更完整的动画过程控制,支持多阶段、循环、往返、延迟与暂停等效果。实际开发中常直接使用简写,但理解各子属性有助于排查问题与精细控制。
- animation-name:绑定@keyframes定义的关键帧名称。
- animation-duration:设置单次动画时长。
- animation-timing-function:设置动画速度变化方式。
- animation-delay:设置动画延迟时间。
- animation-iteration-count:设置播放次数,使用
infinite可实现无限循环。 - animation-direction:设置播放方向,如
normal或alternate。 - animation-fill-mode:控制动画开始前与结束后的样式保留方式,常用值包括
forwards、backwards、both。 - animation-play-state:控制动画运行或暂停。
- animation:简写属性,依次合并名称、时长、速度曲线、延迟、次数、方向与填充模式,例如
animation: fadeIn 0.6s ease 0s 1 forwards;。
@keyframes规则与多阶段动画
@keyframes用于定义关键帧动画各阶段的样式变化。animation-name必须与@keyframes后的名称保持一致,否则动画不会生效。当需求涉及多个阶段、连续动作或循环播放时,应优先使用@keyframes配合animation,而非仅依赖transition。
示例:
@keyframes fadeInUp {
0% {
opacity: 0;
transform: translateY(20px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}常见场景选型与代码示例
选型原则:按钮悬停、输入框聚焦、卡片轻微上浮等状态切换优先使用transition;元素入场、加载循环、呼吸灯、连续位移等多阶段效果优先使用@keyframes加animation。
transition悬停示例
.btn {
transition: background-color .3s ease, transform .3s ease;
}
.btn:hover {
background-color: #1677ff;
transform: translateY(-2px);
}@keyframes + animation完整示例
@keyframes fadeInUp {
0% {
opacity: 0;
transform: translateY(20px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.card {
animation-name: fadeInUp;
animation-duration: .6s;
animation-timing-function: ease;
animation-fill-mode: forwards;
}animation简写拆解
animation: fadeInUp .6s ease .2s 1 forwards; 依次对应:名称、时长、速度曲线、延迟、播放次数与结束状态保留。
循环动画示例
animation: spin 1.2s linear infinite; 适用于持续旋转或加载指示器,此类效果更适合animation而非transition。
辅助属性与性能注意事项
以下属性并非动画核心属性,但在编写动画时常配合使用。合理运用可提升视觉效果与运行性能。
- transform:常用于
translate、scale、rotate等视觉变化,优先使用可提升动画流畅度。 - transform-origin:设置变换中心点,影响旋转与缩放的基准位置。
- opacity:控制透明度变化,适合淡入淡出效果。
- will-change:提示浏览器元素即将发生变化,可优化渲染,但不宜滥用。
- overflow:在位移或缩放动画中用于裁切超出区域的内容。
掌握CSS3动画的关键在于将属性按功能分组:transition处理状态过渡,animation配合@keyframes处理完整过程。结合悬停、入场、循环与停留最后一帧等常见场景进行练习,能够更扎实地理解属性作用与适用边界。
