CSS 加载器与转圈生成器,免费

选择一款加载动画,自定义颜色和速度,复制纯 CSS 代码。

选择样式

预览

CSS + HTML 代码

使用方法

  1. 在上方画廊中选择一种加载器样式。
  2. 自定义颜色、大小、速度和粗细。
  3. 复制生成的 CSS + HTML,粘贴到您的项目中。

常见问题

这些加载器需要 JavaScript 吗?

不需要!所有动画都是纯 CSS @keyframes。无需任何 JavaScript 即可工作。

这些加载器是无障碍的吗?

是的,只要您为加载器元素添加 role="status" 和 aria-label。对于偏好减少动画的用户,可以使用 prefers-reduced-motion 媒体查询进行适配。

使用方法

  1. 选择加载器样式:可从转圈、点阵、条形、环形、脉冲或骨架等样式中选择。
  2. 自定义外观:用滑块调整颜色、大小、动画速度和粗细。
  3. 预览动画:加载器会在预览区实时动画,让您看清确切效果。
  4. 复制 HTML 与 CSS:获取所需的最小 HTML 标记和 CSS , 无任何 JavaScript 依赖。

为什么使用 CSS 加载器生成器?

加载指示器是关键的 UX 元素,提示用户正在进行异步操作,避免让人误以为页面卡住了。纯 CSS 加载器 , 仅使用 CSS 动画,不依赖 JavaScript 或图片 , 轻量、可靠,并通过 GPU 加速的变换以 60 FPS 渲染。这款生成器产出可直接用于生产的转圈代码,可无缝嵌入您的项目。所有动画均使用 @keyframes 结合 transform 和 opacity , 这两个属性在动画时不会触发重排,即使在普通设备上也能保持流畅的 60 FPS。

可用的加载器类型

驱动你的加载动画的 CSS 动画的简史

本生成器输出的 @keyframes 规则和 animation 简写定义在 CSS Animations Module Level 1 中。第一份 W3C 工作草案于 2009 年 3 月 20 日 发布,该规范最终在 2018 年 12 月 11 日 达到 W3C 推荐标准,九年之后。到那时,每个发货的浏览器已经支持该语法多年:Safari 4(2009 年 6 月) 使用 -webkit- 前缀,Firefox 5(2011 年 6 月),Internet Explorer 10(2012 年 10 月),以及 2015 年 4 月 Chrome 43 无前缀支持。CSS Animations Module Level 2 是当前的工作草案,通过 animation-timeline 添加了 由滚动驱动 的动画(Chrome 115,2023 年 7 月发货;Safari 和 Firefox 在 2024 年底跟进)。「spinner」预设中的旋转来自 CSS Transforms Module Level 1,这是一个独立的规范,自 2019 年 2 月以来一直处于候选推荐状态,但已被普遍发货:在 @keyframes 块内 100% 处的 transform: rotate(360deg) 是让环旋转的内容。

无障碍不是可选的:「减少动态效果」偏好

自 2014 年以来发布的每个操作系统都内置了「减少动态效果」无障碍设置:macOS「减弱动态效果」(在「辅助功能」→「显示器」中),iOS「减弱动态效果」,Windows「显示动画」,Android「移除动画」,GNOME「启用动画」关闭。prefers-reduced-motion 媒体查询(定义在 Media Queries Level 5,W3C 首个公开工作草案 2017 年 11 月)让你的 CSS 检测此偏好并停止加载动画。始终将任何加载动画包装在:

@media (prefers-reduced-motion: reduce) {
  .spinner { animation: none; }
}

WCAG 2.1 成功标准 2.3.3「来自交互的动画」(AAA 级,W3C 推荐 2018 年 6 月 5 日) 要求任何由交互触发的运动动画都可以被禁用,除非该运动是必要的。加载动画很少是必要的。WCAG 2.2(2023 年 10 月)继承了相同的规则。

对于屏幕阅读器,将加载动画包装在 <div role="status" aria-live="polite"> 中,带有视觉隐藏的「加载中…」文本。当加载完成时,替换内容;实时区域向辅助技术宣布「已加载」,而不会大声喊叫。在加载时在包含区域上设置 aria-busy="true",之后设置 aria-busy="false"。此模式记录在 W3C ARIA Authoring Practices Guide 实时区域章节中。

为什么 CSS 加载动画在 60 fps 时保持流畅

现代浏览器渲染管线有三个阶段:布局(计算位置)、绘制(填充像素)和 合成(在 GPU 上组合层)。transformopacity 属性是唯一两个跳过布局 绘制并纯粹在合成线程上运行的属性。在任何帧率下,对它们进行动画基本上是免费的。对 widthheighttopleftmargin,或任何改变盒子模型的东西进行动画,会强制每帧执行完整的布局和绘制传递,并在低端设备上迅速降至 60 fps 以下。因此,本生成器中的每个预设 动画 transformopacity。如果你需要给浏览器一个提示,will-change: transform(定义在 CSS Will Change Module Level 1,W3C 候选推荐 2022 年 4 月 26 日)将元素提升到自己的合成层;请节制使用,因为每个层都消耗 GPU 内存。

什么时候加载动画是正确答案,什么时候不是

Response Times: The 3 Important Limits(1993 年,2014 年重述)中,Nielsen Norman Group 的 Jakob Nielsen 定义了三个感知阈值:0.1 秒是「瞬间」1 秒是不间断思维流的极限10 秒是保持用户注意力的极限。将你的加载策略映射到这些阈值:

缓动函数及每个函数的感觉

animation-timing-function 属性(以及 CSS Easing Functions Module Level 1,候选推荐 2022 年 12 月 6 日)选择值如何在关键帧之间进展:

常见错误

更多常见问题

这些加载动画能在旧浏览器上运行吗?

所有现代浏览器(Chrome 43+、Firefox 16+、Safari 9+、Edge 12+)支持 @keyframestransform,无需任何前缀。Internet Explorer 10 和 11 在某些地方需要 -ms- 前缀,但其他方面可以工作。IE 9 及更低版本 没有 CSS 动画支持:回退到动画 GIF,或使用 @supports (animation: spin 1s) 进行特性检测。

当内容加载时,如何停止加载动画?

要么从 DOM 中删除元素,要么用 display: nonehidden 属性隐藏它,要么用 animation-play-state: paused 暂停动画。如果你可能再次显示它,暂停是最便宜的。如果你使用了 ARIA 模式,还要在容器上设置 aria-busy="false" 并用已加载状态公告替换加载文本。

我能比拾色器允许的更进一步自定义加载动画颜色吗?

可以。输出 CSS 使用常规的 hex / rgb / hsl 值;用 CSS 变量(var(--brand-primary))替换它们,这样加载动画就会遵循你的设计系统。对于双色加载动画,编辑 border-color 简写:border-color: var(--brand) transparent transparent transparent 给出经典的「四分之一弧」外观。

为什么不用 SVG 或 Lottie 动画?

CSS 加载动画重量低于 200 字节,无需额外请求,无需 JavaScript 运行时,并在任何外部资源加载之前渲染。SVG 适合复杂形状;Lottie 适合从 After Effects 创建的设计师动画。对于通用的「某些东西正在加载」指示器,CSS 是正确完成工作的最便宜工具。

是否有任何东西被跟踪或发送到服务器?

没有。生成器完全在你浏览器的 JavaScript 中运行。你的颜色选择、大小调整和复制的 CSS 永远不会离开页面。在 DevTools 的网络选项卡中验证。

相关工具