CSS 渐变生成器
线性 / 径向 / 锥形渐变可视化设计 · 多色标拖拽 · 实时 CSS 代码
线性/径向/锥形/CSS 代码
线性 / 径向 / 锥形渐变可视化设计 · 多色标拖拽 · 实时 CSS 代码
在色条上点击添加色标 · 拖拽调整位置 · 双击删除
了解工具定位 · 使用场景 · 对比优势
选择渐变类型(线性、径向、锥形),拖动色标或输入色值,实时预览渐变效果并一键复制 CSS 代码。前端开发者快速生成背景样式、设计师验证渐变配色、自媒体做封面渐变,无需打开设计软件。所有计算在浏览器内完成,颜色数据不上传服务器。
前端开发者在设计按钮悬停态、背景渐变或卡片分割线时,需要快速生成线性或径向渐变代码。本工具直接输出 CSS 代码片段,支持自定义角度、颜色节点和渐变类型,省去手动写 background 属性的试错时间,复制即可嵌入项目。
运营人员制作公众号封面、海报背景或 Instagram 故事时,需要一张有层次感的渐变图。本工具提供线性、径向、锥形三种渐变模式,实时预览颜色过渡效果,截图或导出后直接用于配图,无需打开 Photoshop 或 Sketch。
学习 CSS 动画的初学者想用渐变作为背景过渡效果,但手动写 @keyframes 和渐变组合容易出错。本工具生成标准 CSS 渐变代码,复制后可直接套用到动画 demo 中,让学习者专注于动画逻辑而非颜色计算。
产品经理在 Sketch/Figma 中画低保真原型时,需要快速填充渐变背景来区分功能区域。本工具在线调整颜色与渐变类型,生成截图后直接拖入原型工具,比在设计软件里调渐变参数快 3 倍以上。
独立游戏开发者制作角色血条、技能冷却光环或菜单背景时,常用径向渐变模拟发光效果。本工具支持多色节点和透明度调节,生成 CSS 代码后直接用于 Unity WebGL 或 Cocos 项目的 UI 组件,避免手写 Canvas 渐变逻辑。
| 维度 | 本工具(渐变生成器) | CSS Gradient(cssgradient.io) | 手动编写 CSS |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,颜色参数不上传任何服务器 | 浏览器端处理,无上传 | 完全本地,不涉及网络 |
| 处理速度 | 调整参数后即时预览,无延迟 | 即时预览,响应迅速 | 需反复保存文件、刷新浏览器查看效果,耗时较长 |
| 离线可用 | 页面加载后完全离线可用,无网络依赖 | 页面加载后离线可用 | 完全离线,依赖本地编辑器 |
| 交互方式 | 可视化滑块+色盘拖拽,实时预览渐变效果 | 可视化滑块+色盘,实时预览 | 纯文本编写 CSS 代码,无可视化反馈 |
| 输出格式 | 直接生成 CSS 代码,支持线性/径向/锥形渐变 | 生成 CSS 代码,主要支持线性/径向渐变 | 需手动编写所有 CSS 属性,易出错 |
| 学习成本 | 零门槛,拖拽即可生成代码 | 零门槛,操作直观 | 需掌握 CSS background-image / gradient 语法 |
| 锥形渐变支持 | 支持(conic-gradient) | 不支持 | 需手动编写,语法较复杂 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| linear-gradient(to right, #ff0000, #0000ff) | 线性渐变,从左到右,从红色过渡到蓝色 | 典型场景:最常见的双色水平渐变 |
| radial-gradient(circle, #ffff00 0%, #ff6600 50%, #ff0000 100%) | 径向渐变,圆形,从中心黄色到橙色再到红色 | 典型场景:三色径向渐变,模拟太阳效果 |
| conic-gradient(from 0deg, #ff0000, #00ff00, #0000ff, #ff0000) | 锥形渐变,从0度开始,红绿蓝循环一周 | 典型场景:色环或仪表盘风格的锥形渐变 |
| linear-gradient(45deg, #000000 0%, #ffffff 50%, #000000 100%) | 线性渐变,45度角,黑白黑白条纹效果 | 边界 case:使用相同颜色首尾,形成条纹图案 |
| radial-gradient(ellipse at 20% 80%, #00ff00 0%, transparent 100%) | 径向渐变,椭圆形状,位于左下角,绿色到透明 | 边界 case:使用透明色和自定义位置,适合叠加效果 |
| conic-gradient(from 90deg at 30% 30%, #ff0000, #0000ff) | 锥形渐变,从90度开始,中心偏移到左上角 | 边界 case:锥形渐变支持偏移中心点,非默认圆心 |
| linear-gradient(180deg, #abc, #def) | 线性渐变,从上到下,浅蓝绿色到浅紫蓝色 | 易错 case:使用三字母十六进制简写,需正确解析 |
| radial-gradient(circle closest-side, #ff0000 0%, #00ff00 50%, #0000ff 100%) | 径向渐变,圆形,尺寸为最近边,三色渐变 | 易错 case:closest-side 关键字改变渐变范围,新手易忽略 |
<div style="background: linear-gradient(red, blue)"><div style="background: linear-gradient(red, blue);"> 或 <div class="gradient"> + CSS 文件里写 .gradient { background: linear-gradient(red, blue); }HTML style 属性里 CSS 语法完全有效,但很多人漏掉分号结尾,导致后续属性失效。更推荐分离到 CSS 文件,便于复用和调试。
radial-gradient(circle 100px 50px at center, red, blue)radial-gradient(ellipse 100px 50px at center, red, blue) 或 radial-gradient(circle 50px at center, red, blue)circle 不接受两个半径值(它只有一个半径);想定义椭圆必须用 ellipse 关键字,然后写宽高(宽 高)。circle 写两个值会被浏览器忽略第二个。
conic-gradient(red 0deg, blue 90deg, green 180deg, yellow 270deg)conic-gradient(red 0deg, blue 90deg, green 180deg, yellow 270deg) 或 conic-gradient(red 0turn, blue 0.25turn, green 0.5turn, yellow 0.75turn)写法本身没错,但混用 deg/turn/rad 容易算错比例。建议全用 deg(0-360)或全用 turn(0-1),保持单位一致,避免 0.5turn 和 180deg 混写时的心算错误。
linear-gradient(to bottom, red, blue) 以为是从上到下渐变linear-gradient(to bottom, red, blue) 实际是从上到下(顶部红色到底部蓝色)to bottom 表示渐变方向指向底部,所以起点是顶部红色,终点是底部蓝色。想从底部红色渐变到顶部蓝色,应写 to top。很多人把方向关键字和颜色顺序搞反。
linear-gradient(red 120%, blue 200%)linear-gradient(red 100%, blue 100%) 或 linear-gradient(red 0%, blue 100%)CSS 渐变允许位置值超出 0%-100%,但行为是:<0% 的颜色被裁剪,>100% 的颜色被截断。超过 100% 的停止点不会产生额外渐变,只会让颜色在终点后纯色填充。
background: linear-gradient(red, blue), radial-gradient(yellow, green);检查 Can I Use 确认浏览器支持 multi-background;或回退到单层渐变 + 纯色 fallback:background: red; background: linear-gradient(red, blue);IE9+ 支持线性渐变,但多背景(逗号分隔多个渐变)在 IE11 及更早版本中不支持。如果不加 fallback,整个背景会消失。
<rect fill="linear-gradient(red, blue)" /><defs><linearGradient id="g"><stop offset="0%" stop-color="red"/><stop offset="100%" stop-color="blue"/></linearGradient></defs><rect fill="url(#g)" />SVG 有自己的渐变语法(linearGradient/radialGradient 元素),不支持 CSS 的 gradient() 函数。直接复制 CSS 代码到 SVG fill 属性会无效。
linear-gradient(transparent, white) 以为透明到白色linear-gradient(rgba(255,255,255,0), rgba(255,255,255,1)) 或 linear-gradient(transparent, white)transparent 关键字在 CSS 中等于 rgba(0,0,0,0)(完全透明黑色),不是透明白色。如果背景是白色,透明到白色渐变会先显示黑色过渡,看起来脏。用 rgba 指定白色透明更准确。
公式推导 · 流程图解 · 依据出处
C(t) = (1 - t) × C0 + t × C1, t ∈ [0, 1]
C(t) — 插值位置 t 处的颜色值(RGB 分量)C0 — 起始颜色值(RGB 分量,0-255)C1 — 结束颜色值(RGB 分量,0-255)t — 插值比例,0 为起点,1 为终点从红色 (255, 0, 0) 到蓝色 (0, 0, 255) 的线性渐变,取 t=0.5 处颜色:R = (1-0.5)×255 + 0.5×0 = 127.5,G = (1-0.5)×0 + 0.5×0 = 0,B = (1-0.5)×0 + 0.5×255 = 127.5,得到中紫色 (128, 0, 128)。
适用于线性渐变中任意两点间的颜色插值,是 CSS linear-gradient 的核心算法。径向/锥形渐变在此基础上增加角度或半径参数。不适用于非连续色标(如硬边渐变),此时需引入 step 函数。
3 种主流语言 · 复制即用
from PIL import Image, ImageDraw
# 创建线性渐变图像 (从左到右: 红→蓝)
width, height = 400, 200
img = Image.new('RGB', (width, height))
draw = ImageDraw.Draw(img)
for x in range(width):
# 按 x 位置线性插值颜色分量
r = int(255 * (1 - x / width)) # 红色递减
b = int(255 * (x / width)) # 蓝色递增
for y in range(height):
draw.point((x, y), fill=(r, 0, b))
img.save('linear_gradient.png')
print('线性渐变已保存: linear_gradient.png')package main
import (
"image"
"image/color"
"image/png"
"os"
)
func main() {
// 创建径向渐变图像
width, height := 400, 400
img := image.NewRGBA(image.Rect(0, 0, width, height))
cx, cy := float64(width)/2, float64(height)/2 // 圆心
maxDist := cx // 最大半径
for y := 0; y < height; y++ {
for x := 0; x < width; x++ {
dx := float64(x) - cx
dy := float64(y) - cy
dist := sqrt(dx*dx + dy*dy)
ratio := dist / maxDist
if ratio > 1 {
ratio = 1
}
// 从黄色(中心)到蓝色(边缘)
r := uint8(255 * (1 - ratio))
g := uint8(255 * (1 - ratio))
b := uint8(128 + uint8(127*ratio))
img.Set(x, y, color.RGBA{r, g, b, 255})
}
}
f, _ := os.Create("radial_gradient.png")
defer f.Close()
png.Encode(f, img)
}
func sqrt(x float64) float64 {
// 简单牛顿迭代求平方根
z := 1.0
for i := 0; i < 10; i++ {
z -= (z*z - x) / (2 * z)
}
return z
}// 生成 CSS 线性渐变代码示例
function generateLinearGradient(colors, angle = 180) {
if (colors.length < 2) {
throw new Error('至少需要两种颜色');
}
const stops = colors.map((c, i) => {
const percent = (i / (colors.length - 1)) * 100;
return `${c} ${percent.toFixed(1)}%`;
});
return `background: linear-gradient(${angle}deg, ${stops.join(', ')});`;
}
// 使用示例
const cssCode = generateLinearGradient(['#ff0000', '#00ff00', '#0000ff'], 90);
console.log(cssCode);
// 输出: background: linear-gradient(90deg, #ff0000 0.0%, #00ff00 50.0%, #0000ff 100.0%);
// 生成径向渐变 CSS
function generateRadialGradient(colors, shape = 'circle') {
const stops = colors.map((c, i) => {
const percent = (i / (colors.length - 1)) * 100;
return `${c} ${percent.toFixed(1)}%`;
});
return `background: radial-gradient(${shape}, ${stops.join(', ')});`;
}
console.log(generateRadialGradient(['#ffcc00', '#ff6600']));
// 输出: background: radial-gradient(circle, #ffcc00 0.0%, #ff6600 100.0%);8 个高频疑问
「渐变生成」下的其他工具