html如何转圈_html实现加载转圈动画的CSS技巧【详解】
发布时间 - 2026-01-03 00:00:00 点击率:次最简纯CSS转圈动画:用border构造单色圆环+rotate(360deg)无限旋转,配合border-radius:50%、transparent边框及linear缓动;Safari需will-change:transform或translateZ(0)启用硬件加速。
用 border + animation 实现最简转圈动画
纯 CSS 实现加载转圈,核心是利用 border 的边框绘制和 transform: rotate() 配合 @keyframes。不需要 JS,不依赖外部资源,兼容性好(IE10+)。
常见错误是直接对元素整体旋转,导致内容也跟着转;正确做法是只旋转一个无内容的伪元素或空 @keyframes spin {
to { transform: rotate(360deg); }
} Safari(尤其 iOS 14–15)对纯 强制启用硬件加速可缓解:给转圈元素添加 固定像素(如 默认 原理是先画一个完整圆环,再用 @keyframes spin-gap {
to { transform: rotate(360deg); }
} 实际项目中,最容易被忽略的是动画触发时机与 DOM 生命周期的配合——比如组件挂载后才开始动画,或请求结束时及时移除 class。CSS 动画本身没状态管理,这部分得靠 JS 控制 class 切换,别指望纯 CSS 自动启停。,并用 border 构造圆环。
border-radius: 50% 让元素呈圆形border 宽度一致,但只留一边有颜色(如 border-top: 4px solid #007bff),其余设为透明(transparent)transform: rotate(360deg),不能用 rotateZ 或其他变体,否则部分旧版 Safari 不识别animation-timing-function: linear,避免默认 ease 导致转速不均.spinner {
width: 20px;
height: 20px;
border: 4px solid transparent;
border-top-color: #007bff;
border-radius: 50%;
animation: spin 1s linear infinite;
}
解决 Safari 中
transform 动画卡顿问题
transform 的 rotate 动画可能掉帧,尤其在低功耗模式下。根本原因是浏览器未将其提升为独立图层。will-change: transform 或补一个极小的 translateZ(0)。
will-change: transform 最直接,但不要滥用——仅用于持续动画的元素,否则影响内存transform: rotate(0deg) translateZ(0) 开启 GPU 渲染overflow: hidden 和子元素旋转,Safari 可能截断动画轨迹.spinner {
will-change: transform;
/* 或者 */
/* transform: rotate(0deg) translateZ(0); */
}响应式转圈大小适配不同设备
20px)在高 DPI 屏幕上显得过小,在小屏手机上又可能遮挡内容。应优先使用相对单位,并配合 min-width/max-width 控制边界。
em 或 rem 替代 px,让尺寸随父文本缩放(例如按钮内的加载图标)clamp() 设置弹性范围:width: clamp(16px, 2.5,兼顾小屏、桌面、大屏
vw, 32px)border-width 也要同比例缩放,否则圆环粗细会失衡vertical-align: middle 避免基线错位.spinner-inline {
width: clamp(12px, 1.8vw, 24px);
height: clamp(12px, 1.8vw, 24px);
border-width: clamp(2px, 0.9vw, 4px);
vertical-align: middle;
}用
clip-path 做更精细的转圈控制(如缺口圆环)border 转圈是实心圆弧,但有些设计需要“缺口”或“断开”的环形(比如进度感更强的 loading)。这时 clip-path 比改 SVG 更轻量。clip-path: polygon() 切掉一小段,再旋转它——视觉上就像一段弧在转动。
transform-origin: center,否则裁剪后旋转中心偏移clip-path 的 polygon 支持稳定,但 IE 完全不支持,需降级回 border 方案.spinner-gap {
width: 32px;
height: 32px;
border: 4px solid #007bff;
border-radius: 50%;
animation: spin-gap 1.2s linear infinite;
transform-origin: center;
clip-path: polygon(
0% 0%, 100% 0%, 100% 100%, 0% 100%,
0% 50%, 15% 50%, 15% 45%, 0% 45%
);
}
# css
# html
# js
# go
# svg
# 伪元素
# 浏览器
# safari
# ios
# 硬件加速
# 卡顿问题
# overflow
# firefox
# class
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
微信h5制作网站有哪些,免费微信H5页面制作工具?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
Laravel如何优化应用性能?(缓存和优化命令)
Linux安全能力提升路径_长期防护思维说明【指导】
JS弹性运动实现方法分析
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
黑客如何利用漏洞与弱口令入侵网站服务器?
如何在阿里云域名上完成建站全流程?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
如何快速辨别茅台真假?关键步骤解析
焦点电影公司作品,电影焦点结局是什么?
免费视频制作网站,更新又快又好的免费电影网站?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
android nfc常用标签读取总结
实例解析Array和String方法
如何用免费手机建站系统零基础打造专业网站?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
如何挑选最适合建站的高性能VPS主机?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何快速搭建高效WAP手机网站吸引移动用户?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
如何用AWS免费套餐快速搭建高效网站?
如何在宝塔面板中修改默认建站目录?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
如何快速搭建高效香港服务器网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
nginx修改上传文件大小限制的方法
Python并发异常传播_错误处理解析【教程】
javascript如何操作浏览器历史记录_怎样实现无刷新导航
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
简单实现Android文件上传
EditPlus中的正则表达式 实战(2)
网站建设要注意的标准 促进网站用户好感度!
JavaScript如何实现继承_有哪些常用方法
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)

