✨ CSS动画生成器
预设动画 · @keyframes · 实时预览
预设动画 · @keyframes · 实时预览
animation简写:name duration timing-function delay iteration-count direction fill-mode。最常用的是name duration timing-function。
ease=慢→快→慢(默认),ease-in=慢→快,ease-out=快→慢,ease-in-out=慢→快→慢(比ease更平滑),linear=匀速。infinite代表无限循环。
使用animation-fill-mode: forwards。本工具生成的CSS自动包含此选项,确保动画播放结束后元素保持在最后一帧位置。
百分比按时间轴分布,0%是开始帧、100%是结束帧。中间的50%等代表动画进行到一半的状态。系统会按数值从小到大排列执行。
transition需要触发条件(如hover),且只能从当前状态过渡到目标状态;animation自动播放,可定义多关键帧的复杂动画,还能循环和反向。
优先只动画化transform和opacity,这两个属性走GPU合成,最流畅。尽量别动画化width、height、top、left等会触发重排的布局属性。
控制播放方向:normal正向、reverse反向、alternate交替(正反交替)、alternate-reverse从反开始。做钟摆、呼吸灯等来回效果常用alternate。
可以。animation: name1 1s, name2 2s; 用逗号分隔多个动画,即可让元素同时具备淡入和旋转等多种效果。
animation是8个子属性的简写,掌握它们就能精细控制任何动画。
| 子属性 | 作用 | 示例 |
|---|---|---|
| animation-name | 指定@keyframes名称 | fadeIn |
| animation-duration | 单次播放时长 | 1.5s |
| animation-timing-function | 缓动(速度曲线) | ease-in-out |
| animation-delay | 延迟开始时间 | 0.5s |
| animation-iteration-count | 播放次数 | infinite |
| animation-direction | 播放方向 | alternate |
| animation-fill-mode | 首/末帧填充 | both |
| animation-play-state | 暂停/运行 | paused |
fill-mode是最容易忽略但最实用的:backwards让元素在延迟期就处于第一帧状态,forwards让动画结束后停在最后一帧,both两者兼顾。
| 函数 | 速度变化 | 视觉感受 |
|---|---|---|
| linear | 全程匀速 | 机械、生硬,适合进度条 |
| ease-in | 慢→快 | 离场掉落的加速感 |
| ease-out | 快→慢 | 入场缓停、自然利落 |
| ease-in-out | 慢快慢 | 平缓、专业 |
| cubic-bezier(0.68,-0.55,0.27,1.55) | 先快后缓再回弹 | 俏皮、有弹性的交互 |
缓动决定动画的"手感",同样的位移配不同缓动,观感差异巨大。
动画性能的关键是"动什么"。浏览器对 transform(位移/缩放/旋转) 和 opacity(透明度) 做了GPU加速,动画化它们几乎不卡顿。
| 属性 | 是否推荐动画 | 原因 |
|---|---|---|
| transform | 推荐 | GPU合成,不触发布局 |
| opacity | 推荐 | 只做透明合成 |
| color/background | 可以 | 触发重绘但不重排 |
| top/left/width/margin | 避免 | 触发重排,容易卡顿 |
| box-shadow | 避免 | 重绘成本高 |
| 场景 | 动画类型 | 建议时长 |
|---|---|---|
| 页面入场 | 淡入+滑入 | 0.3-0.6s |
| 按钮反馈 | 缩放/位移 | 0.1-0.2s |
| 加载状态 | 旋转/呼吸 | 1-2s循环 |
| 达成提示 | 弹跳/放大 | 0.5-0.8s |
| 错误提示 | 抖动 | 0.3-0.5s |
动画时长一般的黄金区间是0.1s-0.5s,太慢会让用户觉得拖沓,太快则看不清。
| 函数 | 特点 | 用途 |
|---|---|---|
| linear | 匀速 | 进度条、旋转 |
| ease | 慢快慢(默认) | 通用过渡 |
| ease-in | 慢→快 | 离场淡出 |
| ease-out | 快→慢 | 入场淡入 |
| ease-in-out | 慢快慢更平滑 | 钟摆、呼吸 |
| cubic-bezier(n,n,n,n) | 自定义曲线 | 回弹等特殊效果 |
| 动画 | 关键变化 | 典型用途 |
|---|---|---|
| fadeIn | opacity 0→1 | 淡入 |
| slideIn | translateY -30px→0 | 滑入 |
| bounce | translateY 弹跳 | 达成提示 |
| rotate | rotate 0→360deg | 旋转 |
| pulse | scale 1→1.1 | 呼吸强调 |
| shake | translateX 抖动 | 错误提示 |
| flip | rotateY 90→0deg | 翻转入场 |
| zoomIn | scale 0.5→1 + 淡入 | 放大入场 |
1. 选择动画预设。
2. 调整时长和延迟。
3. 选择缓动函数和次数。
4. 查看实时预览。
5. 复制@keyframes和animation CSS代码。