前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库CSS conic-gradient 与 repeating-conic-gradient 区别
CSS动画与视觉

conic-gradient 和 repeating-conic-gradient 有什么区别?怎么用它们画饼图?

conic-gradient() 从圆心开始沿角度方向扫一圈,颜色从 0deg 到 360deg 分布。如果色标没铺满 360 度,剩下的部分用最后一个颜色填充。repeating-conic-gradient() 则会把定义好的色标自动重复,直到铺满整圈,适合做等分条纹、棋盘格这类重复图案。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#动画与视觉#动画
先看核心答案读代码示例
理解线索

锥形渐变的两种模式

  1. conic-gradient色标从 0 到 360 度分布,不重复,剩余空间用末色填充
  2. repeating-conic-gradient色标段自动重复,直到填满 360 度
  3. 硬边技巧让前一个色标的结束角度等于下一个色标的开始角度,就能画出没有过渡的纯色块

锥形渐变是 background-image,不是 background-color,写在 background 缩写里时注意不要和纯色值冲突。

核心回答

先记住这个答案

conic-gradient() 以圆心为起点,沿顺时针方向把颜色铺满 360 度。你给几个色标,它就从第一个色标开始扫,扫到最后一个色标结束,剩余角度用最后那个颜色填。repeating-conic-gradient() 的区别在于,色标段结束后不是用末色填充,而是从头再来一遍,重复铺满整圈。所以 conic-gradient 适合画饼图(每个色块占固定角度),repeating-conic-gradient 适合画等分条纹、棋盘格这类重复图案。

  • conic-gradient 只画一圈
  • 重复锥形渐变按角度平铺
  • 相邻色标角度相同可以画硬边色块
  • 配合 border-radius: 50% 变成饼图

用 conic-gradient 画饼图

饼图的思路很简单:把容器裁成圆形,然后用硬边锥形渐变画出各个扇区。所谓硬边,就是让前一个颜色的结束角度和下一个颜色的开始角度完全一样,没有渐变过渡。

一个三段饼图CSS
.pie {
  width: 200px;
  height: 200px;
  border-radius: 50%;              /* 裁成圆形 */
  background: conic-gradient(
    #3b82f6 0deg 120deg,            /* 蓝色占 120 度 */
    #f59e0b 120deg 210deg,          /* 橙色占 90 度 */
    #10b981 210deg 360deg           /* 绿色占 150 度 */
  );
}

每个颜色写两个角度,第一个是开始角度,第二个是结束角度。前一个颜色的结束角度和后一个颜色的开始角度一样(都是 120deg、210deg),所以色块之间没有渐变过渡,是清晰的硬边。 如果你希望色块之间有柔和过渡,把中间的角度稍微错开就行。比如蓝色结束在 118deg,橙色从 122deg 开始,中间 4 度的范围就会出现渐变。

repeating-conic-gradient 做重复图案

repeating-conic-gradient 的用法和 conic-gradient 一样,区别是色标段铺完后会自动从头重复。

棋盘格纹理CSS
.checkerboard {
  width: 200px;
  height: 200px;
  background: repeating-conic-gradient(
    #000 0deg 90deg,
    #fff 90deg 180deg
  );
  background-size: 50px 50px;       /* 每个重复单元 50x50 */
}

这里定义了黑白各占 90 度,铺满 180 度。repeating-conic-gradient 把这 180 度重复两次填满 360 度。配合 background-size 控制每个单元的大小,就得到了棋盘格效果。 如果换成 conic-gradient,写同样的色标,超出 180 度的部分会一直是白色(最后一个颜色),不会重复,也就画不出棋盘格。

和径向渐变、线性渐变的关系

三种渐变的区别在于颜色分布的方向。linear-gradient 是沿一条直线铺,radial-gradient 是从中心向外辐射,conic-gradient 是绕圆心转一圈。所以锥形渐变特别适合做圆形的可视化:饼图、环形进度条、色相环。

做环形进度条时,可以在 conic-gradient 的基础上叠一个白色的小圆,遮住中间部分。或者用 mask 属性裁出环形区域。这比用 SVG 的 stroke-dasharray 实现起来更简单,也不需要算路径长度。

角度单位除了 deg,还可以用 turn(一圈 = 1turn)和百分比。画饼图时用百分比最直观:conic-gradient(#3b82f6 0% 33%, #f59e0b 33% 58%, #10b981 58% 100%),数据是多少就写多少,不用换算成角度。

回答前,多想一步

容易答错的地方

以为 conic-gradient 是从上方开始的
默认的起始角度是 12 点钟方向(正上方),但可以用 from 关键字改变起点。比如 conic-gradient(from 90deg, ...) 就是从 3 点钟方向开始。如果发现饼图的起始位置不对,先检查有没有设 from。
漏了硬边写法导致色块之间有渐变
只写 conic-gradient(#3b82f6 33%, #f59e0b 58%, #10b981) 的话,33% 到 58% 之间有蓝色到橙色的渐变过渡。要画清晰的色块,必须让前一个颜色的结束位置和下一个颜色的开始位置重合:#3b82f6 0% 33%, #f59e0b 33% 58%。
把 background-image 和 background-color 搞混
conic-gradient() 生成的是图片,赋值给 background-image 或 background 缩写都行。但如果写了 background-color: conic-gradient(...),浏览器不会识别,因为 background-color 只接受纯色值。
试着用自己的话回答

面试官还会怎么问?

怎么用纯 CSS 做一个环形进度条?

用 conic-gradient 画一个只占部分角度的色块(比如 conic-gradient(#3b82f6 0% 70%, #e5e7eb 70% 100%)),再在中间叠一个白色圆形遮住中心区域,就是一个 70% 进度的环形条。进度值可以用 CSS 自定义属性 --progress 来动态控制。

conic-gradient 能做色相环吗?

能。写 conic-gradient(red, yellow, lime, aqua, blue, magenta, red) 就是一个完整的色相环。起始和结束都是红色,中间的颜色会自动渐变过渡。再用 border-radius: 50% 裁成圆就行。

锥形渐变在移动端有兼容性问题吗?

conic-gradient 从 Chrome 69、Safari 12.1、Firefox 83 开始支持,覆盖率已经很高。repeating-conic-gradient 的支持时间和 conic-gradient 一致。IE 不支持,但如果需要兜底,可以用 background-color 写一个纯色降级。

从一道题,走向一组知识

把知识连起来

动画与视觉

CSS 动画里频繁改自定义属性,为什么会卡?

用 CSS 自定义属性驱动锥形渐变的角度变化,可以做环形进度条动画。

动画与视觉

用 transition 做 grayscale() 的去色动画,性能上要注意什么?

渐变动画和 filter 动画都不走合成线程,需要关注重绘性能。

参考资料

  • CSS:动画与视觉参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 用 conic-gradient 画饼图
  3. repeating-conic-gradient 做重复图案
  4. 和径向渐变、线性渐变的关系
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑