CSS 动画生成器,免费

可视化构建 CSS @keyframes 动画 · 选择预设或自定义时长、变换与缓动曲线。复制可直接用于生产的代码。

预设

参数

预览

方块

生成的 CSS

使用方法

  1. 选择动画预设:从常见动画中选择 , 淡入、滑入、弹跳、旋转、脉冲、抖动等。
  2. 自定义时长和行为:调整时长、延迟、缓动函数、迭代次数和填充模式。
  3. 复制 CSS:完整的 @keyframes 定义和 animation 简写属性已准备好,可直接粘贴到您的样式表中。

为什么使用 CSS 动画生成器?

CSS 动画让界面栩栩如生 , 吸引注意力、提供视觉反馈、并营造精致的用户体验。手写 @keyframes 规则需要掌握正确的语法、缓动函数名称和属性组合。这款生成器提供精心调校的动画预设,带实时预览,让您微调每个参数,产生可直接用于生产的 CSS , 无需 JavaScript 或动画库。

功能特性

常见问题

CSS 中 animation 与 transition 有什么区别?

CSS 过渡(transition)由状态变化触发(悬停、聚焦、类切换),在两个状态之间过渡。CSS 动画使用 @keyframes 定义多个状态,独立于用户交互运行 , 可以循环、反向播放并自动开始。

animation-fill-mode 是什么?为什么重要?

animation-fill-mode 控制元素是否在动画开始前保留首个关键帧的样式(backwards)、在动画结束后保留最后关键帧的样式(forwards)或两者都保留。如果没有 forwards,元素会在动画结束后突然回到原始样式。

CSS 动画性能好吗?

仅使用 transform 和 opacity 的动画会由 GPU 加速,非常流畅。应避免对布局属性(width、height、margin 或 top/left)做动画 , 它们会触发布局重新计算,可能造成卡顿。请坚持使用 transform 和 opacity 以保持 60 FPS。

CSS 动画的真正作用

CSS 动画在时间上的定义关键帧之间插值一个或多个 CSS 属性,无需 JavaScript 即可产生可见的运动或变化。该模型有两部分:@keyframes 规则定义动画在基于百分比的步骤(0% 到 100%)上的样子,而 animation 简写属性(或其长写表亲 animation-durationanimation-delayanimation-timing-functionanimation-iteration-countanimation-fill-mode)告诉浏览器如何播放该关键帧定义。浏览器在 C++ 中处理所有插值、缓动和帧定时,通常对 transform 和 opacity 变化进行 GPU 加速。

动画与 CSS 过渡在两方面不同。过渡在元素状态变化时(悬停、类切换、焦点事件)触发,并在恰好两个值之间插值:旧值和新值。动画独立于状态运行,遵循任意数量的关键帧步骤,可以无限循环,可以反向播放,可以通过 CSS 或 JavaScript 触发、暂停和恢复。过渡是「在半秒内从 A 跳到 B」的正确工具;动画是「让这个吸引注意的脉冲永远循环」或「当元素出现时播放一次入场序列」的正确工具。

对现代 Web 设计,CSS 动画替代了大量曾需要 JavaScript 库的工作。加载器、淡入、上滑、注意脉冲、成功对勾:现在都是标准的 CSS 模式。权衡是复杂序列的表达能力。CSS 动画可以做很多,但在约 5 到 7 个具有同步属性变化的关键帧步骤时不再方便;对于故事板动画、滚动链接序列或依赖 JavaScript 状态的任何动态内容,专用库(GSAP、Framer Motion、Web Animations API)仍是更好选择。

本工具的幕后运作

当你选择一个预设(例如「bounce」或「fade-in」)时,工具将预定义的 @keyframes 字符串加载到预览区域,并将动画属性应用于预览框。关键帧是真正的 CSS,不是自定义格式:你看到的就是你将复制的。滑块通过实时编辑内联 animation 属性来更新动画时间值(持续时间、延迟、迭代次数),因此预览即时反映每次更改,无需重新加载页面。

缓动函数选择使用标准 CSS 时间函数值:linear(恒定速度)、ease(默认,慢开始和结束)、ease-in(慢开始)、ease-out(慢结束)、ease-in-out(慢开始和结束),或 cubic-bezier(x1, y1, x2, y2) 用于自定义曲线。可见的动画曲线由浏览器原生的时间函数实现计算;预览是浏览器实际渲染的输出,不是 JavaScript 模拟。

代码框显示你需要放入样式表的完整 CSS:包括 @keyframes 块和 .your-class { animation: ... } 声明。点击「复制 CSS」,两者作为单个文本块写入你的剪贴板。没有文件生成,没有服务器处理任何东西,工具没有要调用的后端。预览、代码生成和剪贴板写入都在你设备上的 JavaScript 中发生。刷新页面,除非你先复制了,否则你的自定义配置就消失了。

Web 动画简史

真实世界的工作流

常见陷阱及其含义

隐私:一切都在你的浏览器中运行

CSS 生成器工具有两种风格:运行客户端 JavaScript 的简单 HTML 页面(私密、快速)和保存项目的云编辑器(协作但有隐私权衡)。这个工具是第一种。你的滑块值、你选择的预设、你生成的 CSS:所有都保留在你的浏览器会话中。刷新页面,状态消失,除非你先复制了 CSS。没有服务器存储你的动画选择,没有分析跟踪你测试的预设,也不需要账户。

隐私属性主要对专有设计工作很重要。一个工作室为机密客户项目原型设计动画,一个开发者在未发布应用的微交互上工作,或一个设计师迭代品牌活动:任何迭代历史或正在进行的设计可能泄漏工作信息的环境。使用此工具,没有任何东西被捕获,因为没有任何东西被发送。打开浏览器的网络选项卡,使用期间你会看到零出站请求;只有初始页面加载获取 HTML 和 JavaScript。

什么时候另一个工具是正确选择

更多常见问题

如何让动画只播放一次?

设置 animation-iteration-count: 1(如果未指定,则为默认值)。要让元素在动画完成后保持在动画的最终状态(而不是弹回原始样式),还要设置 animation-fill-mode: forwards。组合简写是 animation: fadeIn 0.5s ease-out forwards;

我可以暂停和恢复动画吗?

可以,使用 animation-play-state: paused(或 running)。通过 JavaScript(例如,在按钮单击时)或通过 CSS 在 :hover 中切换此属性以获得「悬停时暂停」模式。动画在其当前点冻结,并在设置回 running 时从那里恢复,没有进度丢失。这在过渡中工作方式相同,但只有 animation-play-state 属性存在用于运行时暂停控制。

如何在点击或滚动时触发动画?

对于点击触发,通过 JavaScript 切换 CSS 类:element.classList.toggle('animate-in')。当类被添加时动画运行。对于滚动触发,使用 IntersectionObserver 检测元素何时进入视口并在那时添加类。对于现代浏览器,CSS Scroll-driven Animations 让你通过 animation-timeline: scroll() 直接将动画进度绑定到滚动位置而无需 JavaScript。

为什么我的动画闪烁或卡顿?

大多数闪烁/卡顿问题来自动画化触发布局的属性(width、height、top/left)而不是基于变换的等效项。从 left: 0 切换到 transform: translateX(0),动画应该平滑。其他原因:许多半透明层的过度绘制、JavaScript 在同一帧中读取和写入样式的布局抖动,或动画元素上的过多阴影和滤镜。

我应该在可访问性关键界面上使用动画吗?

使用它们,但尊重 prefers-reduced-motion。WCAG 2.1 指南建议提供禁用非必要运动的选项。将装饰性动画包装在 @media (prefers-reduced-motion: no-preference) 中,以便设置 OS 偏好的用户获得静态体验。基本反馈动画(加载指示器、错误震动)可以保留;纯装饰性动画应该对敏感用户选择加入。

我可以使用 cubic-bezier 自定义缓动曲线吗?

可以。cubic-bezier(x1, y1, x2, y2) 时间函数让你用两个控制点定义任何缓动曲线。每个 x 值在 0 和 1 之间(代表时间),y 值可以是负的或大于 1(允许超调和反弹效果)。使用我们的 Cubic Bezier 工具或 Lea Verou 经典的 cubic-bezier.com 视觉地选择曲线。常见的预设替代品:ease、ease-in、ease-out、ease-in-out,以及线性别名 CSS 变量 cubic-bezier(0.25, 0.1, 0.25, 1)(默认 ease)。

相关工具

CSS 渐变生成器,免费 CSS cubic-bezier 曲线生成器,免费 CSS 加载器与转圈生成器,免费 CSS Flexbox 生成器,免费