2021-10-05 12:17:40
在CSS中,transition和animation实现动画的核心差异在于适用场景与控制复杂度:transition适合简单两状态过渡,animation适合多阶段复杂动画。 具体优缺点及选择建议如下:
一、transition 的优缺点适用场景
按钮悬停效果(颜色/大小变化)
表单元素焦点状态切换
简单的展开/收起动画
优点
写法简单:无需定义关键帧,仅需指定属性、时长和缓动函数。.button { transition: background-color 0.3s ease;}.button:hover { background-color: red; }
性能较好:浏览器对transition的优化更充分,尤其适合transform和opacity属性。
逻辑清晰:直接绑定到状态变化(如:hover、:focus或类名切换)。
缺点
仅限两状态过渡:无法定义中间状态(如从A→B→C的多阶段变化)。
过程不可控:无法暂停、反向播放或自定义关键帧节奏。
触发条件有限:依赖用户交互(如悬停)型卜消或类名变化,无法自动播放。
适用场景
加载动画(如旋转的loading图标)
页面进入/退出动效
多阶段动画(如先放大后缩小)
优点
控弊差制力强:通过@keyframes定义任意数量的关键帧,支持复杂流程。@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); }}.spinner { animation: spin 1s linear infinite; }
功能丰富:支持循环播放、延迟启动、填充模式(animation-fill-mode)等。
自动触发:无需用户交互即可播放(如页面加载时)。
缺点
语法复杂:需编写@keyframes规则,调试多阶段动画较耗时。
性能风险:过度使用或操作非硬件加速属性(如width、margin)可能卜知导致卡顿。
兼容性处理:旧版浏览器需添加前缀(如-webkit-animation)。
用transition的情况
仅需两个状态间的平滑过渡(如按钮悬停变色)。
追求代码简洁性和性能优化。
用animation的情况
需要多阶段动画、循环播放或自定义节奏(如加载动画)。
动画不依赖用户交互(如自动轮播图)。
结合JS或动画库
动画逻辑复杂(如根据滚动位置触发),可结合JavaScript或GSAP等库实现更精细的控制。
总结:transition适合简单状态切换,代码简洁高效;animation适合复杂动画序列,控制灵活但语法复杂。根据需求选择,并注意性能优化与兼容性处理。