前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 radial-gradient ellipse 与 circle 区别
CSS动画与视觉

radial-gradient 里 ellipse 和 circle 有什么区别?怎么控制渐变的中心和大小?

radial-gradient 默认画椭圆,形状会随容器的宽高比自动拉伸。写 circle 就强制画正圆。渐变中心用 at 指定,大小用 closest-side 或 farthest-corner 这类关键字控制,也可以直接写半径数值。

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

径向渐变的三个参数

  1. 形状circle 画正圆,ellipse 画椭圆,默认 ellipse
  2. 大小四个关键字或具体半径,决定渐变在哪里结束
  3. 位置at x y 指定圆心,默认在容器正中心

ellipse 需要两个半径值(水平和垂直),circle 只要一个。写错个数浏览器会静默忽略整条声明,不会报错。

核心回答

先记住这个答案

radial-gradient 的第一个参数控制渐变的形状和大小。ellipse 画椭圆,会根据容器宽高比自动拉伸;circle 画正圆,宽高比再怎么变都是圆的。渐变中心用 at x y 指定,大小用四个关键字或具体半径值来控制。不写形状时默认 ellipse,不写位置时默认在正中心。

  • 默认 ellipse 会受容器比例影响
  • circle 强制正圆,只接受一个半径值
  • at 30% 70% 把渐变中心移到容器内任意位置
  • closest-side 等控制渐变覆盖范围

circle 和 ellipse 的实际差异

在一个正方形容器里,两者看起来一样。但一旦容器变成长方形,区别就明显了。ellipse 的两个半径分别沿水平和垂直方向拉伸,渐变边缘会跟着容器变扁或变长。circle 的半径只有一个,无论容器什么比例,渐变永远是正圆。

同一个容器里对比两种形状CSS
/* 容器是 300x150 的长方形 */
.ellipse-bg {
  /* 默认 ellipse,渐变边缘是椭圆 */
  background: radial-gradient(ellipse at center, #f06 0%, #fff 100%);
}

.circle-bg {
  /* 强制正圆,多出来的区域被最外层颜色填满 */
  background: radial-gradient(circle at center, #f06 0%, #fff 100%);
}

ellipse 的渐变会铺满整个容器,而 circle 在短边方向可能提前结束,剩下的区域被最后一个色标的颜色填充。所以如果你希望渐变「刚好铺满」,在非正方形容器里用 ellipse 更合适。

四个大小关键字怎么选

渐变的大小决定了色标 100% 的位置在哪里。浏览器提供了四个关键字,不用自己算像素。

closest-side 让渐变边缘刚好碰到最近的那条边。farthest-side 碰到最远的边。closest-corner 碰到最近的角。farthest-corner 碰到最远的角,这也是默认值。

不同关键字的覆盖范围CSS
.small {
  /* 渐变只到最近的边,范围最小 */
  background: radial-gradient(circle closest-side at 30% 30%, #f06, #fff);
}

.large {
  /* 渐变延伸到最远的角,范围最大 */
  background: radial-gradient(circle farthest-corner at 30% 30%, #f06, #fff);
}

这里把圆心放在 at 30% 30% 的位置。closest-side 的渐变半径很短,因为到最近那条边的距离只有容器宽度的 30%。farthest-corner 的半径会很长,要一直延伸到对角。 选哪个取决于你的设计意图:做聚光灯效果用 closest-side,做大面积光晕用 farthest-corner。

回答前,多想一步

容易答错的地方

给 circle 写两个半径值
circle 只接受一个半径,写成 circle 50px 80px 浏览器会直接忽略整条 background 声明,页面上什么都看不到,也不会在控制台报错。需要两个半径就用 ellipse。
以为 at 后面只能写百分比
at 后面可以写百分比、像素、top、right 这些关键字,也可以混着用,比如 at 20px bottom。百分比是相对容器宽高的,像素是绝对值。
试着用自己的话回答

面试官还会怎么问?

怎么用径向渐变画一个同心圆靶心图案?

把多个色标写在同一个位置就能产生硬边。比如 radial-gradient(circle, red 20%, white 20% 40%, red 40% 60%, white 60%) 会画出红白交替的同心圆环。

radial-gradient 能做动画吗?

可以,但性能一般。渐变不能像 transform 那样走 GPU 合成层,每帧都要重新绘制。如果只是改颜色或位置,可以用 CSS 自定义属性配合 @property 注册为可插值类型,让浏览器平滑过渡。

repeating-radial-gradient 和 radial-gradient 有什么区别?

repeating-radial-gradient 会把你定义的色标序列无限重复下去,适合做条纹、波纹等重复图案。普通的 radial-gradient 在最后一个色标之后就停了,剩余区域用最后一个颜色填满。

从一道题,走向一组知识

把知识连起来

动画与视觉

除了 CSS 动画,prefers-reduced-motion 还能用在滚动行为和 JS 动画上吗?

自定义属性可以动态控制渐变参数,这篇讲了自定义属性在动效场景的用法。

动画与视觉

用 CSS 做打字机效果时,steps() 和线性过渡有什么区别?

steps() 和渐变都属于 CSS 视觉效果的面试高频题,放在一起对比复习效率更高。

参考资料

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

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

本题目录
  1. 先记住这个答案
  2. circle 和 ellipse 的实际差异
  3. 四个大小关键字怎么选
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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