在线工具箱
CSS 动画生成器

CSS 动画生成器

内置 20+ 动画预设,可视化编辑关键帧与缓动曲线并输出 CSS。

隐私安全:所有处理均在您的浏览器本地完成,数据绝不上传
CSS动画关键帧动效生成

预设库

悬停缩略块预览动效,点击载入。

实时预览

预览区

关键帧属性

关键帧时间轴

拖拽节点调整百分比,点击选中后在上方编辑属性

缓动曲线

控制点横坐标限定 0~1,纵坐标可超出 0~1 以做回弹;选中控制点后可用方向键微调。

时间参数

迭代次数可填整数或 infinite;时长与延迟单位为秒。

CSS 输出

历史记录

最多保留 50 条,仅保存在本机浏览器,不会上传。

    配置导入 / 导出

    工作原理

    1. 1内部以「动画配置 + 关键帧数组」作为唯一状态。每个关键帧的位移、旋转、倾斜与缩放会被聚合成一条 transform 声明,避免多条 transform 声明相互覆盖——这是手写关键帧最常见的问题。
    2. 2预览使用真实 CSS 动画:把生成的 @keyframes 注入页面中的一个动态样式表,再把 animation 简写规则应用到预览元素,保证预览效果与输出代码完全一致。
    3. 3仅修改 @keyframes 内容、或 animation 简写中某个属性的值时,浏览器会复用同名动画继续播放;只有改动动画名称或属性列表时,工具才会通过读取元素宽度强制重排来重启动画。因此拖拽编辑关键帧与缓动曲线时,预览是连续平滑的。
    4. 4缓动曲线以 cubic-bezier(x1, y1, x2, y2) 表达:两个控制点的横坐标必须落在 0 到 1 之间(越界整条曲线无效),纵坐标允许超出该区间以产生回弹与超调;曲线用 SVG 三次贝塞尔绘制,控制点可拖拽。
    5. 5输出严格按 name duration timing-function delay iteration-count direction fill-mode play-state 的顺序拼接 animation 简写,顺序错误会导致浏览器解析失败,因此由代码统一生成而不依赖手工拼接。

    常见问题

    复制的 CSS 代码可以直接用吗?

    可以。输出的 @keyframes 与 animation 规则粘贴到你的样式表或页面内联样式中即可生效。若选择的是完整规则,记得把示例选择器 .animated-element 换成你自己的类名或元素选择器。

    为什么动画结束后元素会闪回初始状态?

    这是 animation-fill-mode 为 none 时的正常行为:动画结束后元素回到未应用动画时的样式。希望保留结束状态请把填充模式改为 forwards 或 both。当你选择 none 且动画非无限循环时,本工具会给出提示。

    拖动缓动曲线控制点时,为什么横坐标被限制在 0 到 1?

    cubic-bezier 的两个控制点横坐标代表时间进度,必须在 0 到 1 之间,越界会导致整条缓动曲线无效。纵坐标代表输出进度,可以超出 0 到 1,正是靠它做出回弹与超调效果,所以只有横坐标会被限制。

    预览里的播放状态和输出的代码一致吗?

    不完全一致。预览始终以运行状态播放,方便你随时观察动效;播放状态参数只写入输出的代码中。如果你需要输出一个初始暂停的动画,把播放状态改为 paused 即可。

    悬停触发的预览为什么要用一块更大的热区?

    因为动画本身会让元素位移或缩放,若把悬停判断直接绑在元素上,鼠标很可能在动画过程中移出元素而导致动效中断。工具因此改用外层固定热区来判定悬停。输出代码中的 :hover 依然写在元素自身的选择器上。

    历史记录和配置会保存到哪?数据会上传吗?

    全部在浏览器本地完成,零网络请求。历史记录保存在浏览器的 localStorage 中,最多保留 50 条,不会上传到任何服务器;清除浏览器数据或更换设备后会丢失,需要长期保存请使用导出配置下载 JSON 文件。

    更多在线工具