纯html+css可实现兼容性良好的环形loading动画:核心是用border-top单色+border-radius:50%构造旋转环,配合animation与@keyframes实现匀速无限旋转,需确保宽高相等、命名一致、父容器定位正确且css正确引入。

纯 HTML + CSS 就能做出可复用的 loading 环,不需要 JS、不依赖库、不引入外部资源——只要写对 border、animation 和 @keyframes 三个关键点,就能稳定跑在所有现代浏览器里。
为什么 border-top 单色 + border-radius: 50% 是环形加载器的核心
加载环本质是「带缺口的圆」,不是 SVG 或 Canvas。用 border 模拟环体,靠只设置 border-top(或其他单边)来制造旋转时的视觉流动感:
-
border: 10px solid #eee提供底环灰边,作为静止背景 -
border-top: 10px solid #4285f4覆盖上层彩色弧段,它是唯一会动的部分 -
width和height必须相等,否则border-radius: 50%无法形成正圆 - 如果用了
box-sizing: border-box,注意总尺寸 = width/height + 2×border-width,容易撑破容器
animation: lring 1s linear infinite 的参数怎么选才不卡顿
动画节奏直接影响用户感知的“快慢”和“流畅度”,不是越快越好:
-
1s是较稳妥的持续时间:短于 0.6s 容易闪眼,长于 1.5s 显得迟滞 -
linear表示匀速旋转;若想更自然,可换cubic-bezier(0.3,0.6,0.5,1)模拟缓入缓出 -
infinite必须加,否则转一圈就停——这不是 loading,是“转了一圈就放弃” - 别用
transform: rotateZ()替代rotate(),后者更兼容;也别在动画里改border颜色或宽度,会触发重排
常见报错和渲染异常:检查这四行代码是否漏了
90% 的“不动”“变形”“一闪而过”问题,都出在这几个硬性约束上:
- 父容器没设
display: flex或position: relative,导致center失效或定位漂移 -
@keyframes lring名称和animation属性里的名字不一致(比如写成loding或拼错大小写) - 忘了给
.loader加display: inline-block或block,inline 元素不支持宽高和 transform - CSS 文件没正确 link:
<link rel="stylesheet" href="style.css">路径写错或文件名大小写不符(尤其 macOS/Linux 区分大小写)
真正麻烦的不是写出来,而是让这个环在低配安卓 WebView、iOS 12 Safari、甚至某些企业内网 IE11 兼容模式下仍保持旋转——这时候你会发现,transform: rotate(360deg) 比 rotateZ(360deg) 更稳,而删掉所有 will-change 或 backface-visibility 反而更可靠。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











