动画应精简必要,仅用于状态变化、注意力引导和操作反馈,如按钮点击、菜单展开等核心交互;时长宜为200–250ms,选用ease-out缓动,避免重排属性,尊重prefers-reduced-motion偏好。
动画不是越多越好,关键在“必要时才出现”。如果页面处处都在动,用户会分心、疲劳,甚至觉得卡顿或廉价。真正提升体验的动画,是那些能明确表达状态变化、引导注意力、增强操作反馈的部分。
动画比如按钮点击、菜单展开、表单提交成功、模态框进出——这些是用户行为与系统响应直接关联的位置。其他地方如文字渐显、图标无意义浮动、背景缓慢位移,基本可以去掉。
transition: background-color 0.2s),而非旋转+缩放+发光transform: scaleY() + opacity 组合,比纯 opacity 更自然人眼对 100–300ms 的过渡最舒适。超过 400ms 容易感知延迟;低于 80ms 又像没动。同时避免高频变化(如不停闪烁、快速抖动),这类动画容易引发不适甚至光敏反应。
ease-out 或 cubic-bezier(0.34, 1.56, 0.64, 1),避免生硬的 linear
top、scale、filter)部分用户因眩晕、注意力障碍或低性能设备需要禁用动画。CSS 提供了原生支持:
立即学习“前端免费学习笔记(深入)”;
@media (prefers-reduced-motion: reduce) 全局关闭非必要动画transform 和 opacity 触发 GPU 加速,适合做动画;而 height、margin、left/top 会频繁触发重排,卡顿明显。
max-height 过渡(需设合理上限)或 transform: scaleY()
visibility: hidden + opacity,而非 display: none 配合动画:hover 中启动复杂 keyframes 动画,尤其在列表项上批量存在时不复杂但容易忽略:动画的价值不在“炫”,而在“说得清”。一次点击后按钮变色、图标微动、加载图标转一圈——这些小动作,才是用户真正需要的确认感。