CSS中不存在border-conic-gradient,conic-gradient()仅支持background等属性;实现环形进度条需用圆形容器+conic-gradient背景+padding或伪元素遮罩中心。

border-conic-gradient 并不存在——CSS 标准里没有这个函数,也没有 border-conic-gradient 属性。你真正能用的是 conic-gradient(),它只能用于 background(或 mask、list-style-image 等支持 <image> 的属性),不能直接作用于 border。
想用 conic-gradient 做环形进度条,必须绕开“给 border 上渐变”这个误区,转而用背景 + 形状控制来模拟环形视觉。
为什么不能用 border 配合 conic-gradient
-
border只接受纯色、linear-gradient(部分浏览器支持,但行为不可控)、radial-gradient(同上),不支持conic-gradient - 即使强行写
border-image: conic-gradient(...),结果是:
✅ 渐变会被拉伸/平铺到四条边
❌ 完全无法形成围绕圆心的扇形填充
❌ 角度计算失效,0% 进度看起来像随机切片 - 浏览器会静默忽略或降级处理,不报错但也不生效
怎么用 conic-gradient 正确画环形进度条
核心是:固定尺寸 + 圆形容器 + 背景渐变 + 中心遮罩(或 padding 控制绘制区域)
- 元素必须设
width和height相等,且border-radius: 50% - 背景用
conic-gradient(from -90deg, #4a90e2 0deg, #4a90e2 calc(var(--p) <em> 3.6deg), #e0e0e0 0)</em>
→from -90deg把起点对齐顶部,calc(var(--p) 3.6deg)把百分比转为角度(75% = 270°) - “空心环”靠两种方式之一实现:
-
padding: 12px+background-clip: content-box(推荐,无额外 DOM) - 伪元素
::before盖住中心(兼容性稍好,但多一层渲染)
-
- 动画若需旋转效果,别对元素加
rotate()(会带文字一起转),改用background-position+background-size: 200% 200%
常见错误写法与修正对比
-
❌ 错误:
立即学习“前端免费学习笔记(深入)”;
.ring { border: 12px solid conic-gradient(#f00, #0f0); }→ 语法非法,CSS 解析失败 -
✅ 正确(padding 方案):
.ring {<br> width: 100px; height: 100px;<br> border-radius: 50%;<br> padding: 12px;<br> background: conic-gradient(from -90deg, #4a90e2 0deg, #4a90e2 calc(var(--p) * 3.6deg), #e0e0e0 0);<br> background-clip: content-box;<br>} ⚠️ 注意:如果
--p是整数(如--p: 75),就用calc(var(--p) <em> 3.6deg)</em>;如果是小数(如--p: 0.75),就用calc(360deg var(--p))
最容易被忽略的点
conic-gradient 的起始角默认是 0deg(正上方),不是右侧——这和 linear-gradient 完全不同。很多人照搬 to right 的思维写 from 0deg,结果进度从右开始转,UI 对不上产品需求。
真正要“顶部开始顺时针走”,必须显式写 from -90deg 或 from 270deg,否则哪怕数值算对了,视觉也是错的。


















