CSS渐变生成器

可视化构建线性和径向CSS渐变,并复制CSS代码

加载示例
类型
角度135°

色标

0%
100%

CSS输出

background: linear-gradient(135deg, #6366f1 0%, #ec4899 100%);

什么是CSS渐变?

CSS渐变生成器是一种可视化工具,帮助你在不手写渐变语法的情况下构建平滑的颜色过渡效果。在CSS中,渐变是指两种或多种颜色之间的平滑过渡,由浏览器直接渲染,无需任何图片文件。CSS图像模块Level 4规范将渐变函数定义为一种图像值类型,这意味着凡是能接受background-image、list-style-image或border-image值的地方,均可使用渐变。由于浏览器在渲染时对渐变进行光栅化处理,渐变可以缩放至任意分辨率,在高DPI屏幕上不会出现模糊失真。使用CSS渐变生成器既节省时间,又减少反复调试的猜测——你可以直接通过可视化方式调整颜色和位置,然后复制生成好的CSS规则。

CSS支持三种主要渐变形状:线性渐变(沿直线过渡)、径向渐变(从中心点向外扩散)和锥形渐变(围绕中心点旋转扫描)。每种形状均接受一组色标列表,你可以为每个色标指定颜色,并可选填位置(百分比或长度值)。浏览器默认在sRGB色彩空间中对色标之间进行插值,但CSS颜色Level 4允许指定其他色彩空间(如oklch和lab),以获得感知上更平滑的过渡效果。

渐变在网页上已取代图片作为大多数装饰性背景的实现方式。一条CSS规则即可实现过去需要Photoshop导出并发起HTTP请求才能完成的效果。渐变与分辨率无关,除CSS本身外无需消耗任何网络带宽,且可通过标准CSS属性实现动画或过渡效果。渐变语法自2013年起在所有主流浏览器中已趋于稳定,无前缀形式可直接在Chrome、Firefox、Safari和Edge中使用,无需兼容回退方案。

为什么使用这个CSS渐变生成器?

手动编写渐变语法意味着需要反复猜测色标位置、检查角度值,并不断刷新页面查看效果。可视化构建工具让你在构建过程中即时预览渐变效果,通过拖拽调整色标,待效果满意后直接复制最终CSS。

实时可视化预览
每当你修改颜色、位置和角度时,渐变效果会实时更新。无需在编辑器和浏览器之间来回切换。
🔒
隐私优先的处理方式
所有渲染均在浏览器本地完成,颜色数据和渐变配置不会发送至任何服务器。
🎨
支持多种渐变类型
构建线性和径向渐变,完整控制方向、角度和色标位置。一键复制CSS代码。
📋
无需注册账号
打开页面即可开始使用,无需注册、无邮箱验证、无速率限制。加载后可离线使用。

CSS渐变生成器的使用场景

前端开发
构建首屏背景、卡片遮罩层和按钮悬停状态。按目标尺寸预览渐变效果,然后将CSS直接粘贴到样式表或Tailwind配置文件中。
邮件模板设计
部分邮件客户端支持在内联样式中使用CSS渐变。生成精确的渐变代码并内联到元素上,同时为不支持渐变的客户端设置纯色回退颜色。
设计原型制作
在浏览器而非Figma中迭代配色方案时,可快速生成渐变背景。无需导出资源即可并排对比多个方案。
DevOps仪表盘样式
状态仪表盘和监控界面使用颜色渐变来表示严重程度范围(从绿色到红色)或数据密度。生成渐变值,并将其应用到图表背景或状态栏上。
数据可视化
D3.js和Recharts等图表库接受CSS渐变定义,用于面积填充和热力图。可视化构建渐变后,提取色标颜色用于你的比例尺函数。
学习CSS
学习CSS的学生可以通过实验渐变语法,观察角度变化如何影响方向,并理解色标的位置设置原理。生成的CSS可作为可运行的参考示例。

CSS渐变类型参考

CSS定义了五种渐变函数。三种主要类型(线性、径向、锥形)各有一个重复变体,用于平铺图案。repeating-linear-gradient()和repeating-radial-gradient()适用于条纹背景和同心环效果。所有渐变函数均接受任意CSS颜色格式的色标:HEX、RGB、HSL、命名颜色或oklch。五种函数在Chrome、Firefox、Safari和Edge中均有实际全面的浏览器支持,无需供应商前缀。

函数示例语法方向常见用途
linear-gradient()to right, #f00, #00fStraight lineBackgrounds, hero sections, progress bars
radial-gradient()circle, #f00, #00fOutward from centerSpotlight effects, buttons, badges
conic-gradient()from 0deg, #f00, #00fSweep around centerPie charts, color wheels, spinners
repeating-linearto right, #f00 0 10px, #00f 10px 20pxTiled lineStripes, progress indicators, decorative borders
repeating-radialcircle, #f00 0 10px, #00f 10px 20pxTiled circleConcentric ring patterns, retro textures

线性渐变、径向渐变与锥形渐变的对比

每种渐变类型将颜色映射到几何图形的方式各不相同。选择哪种类型取决于你需要的视觉效果,而非它们之间的质量差异。对于大多数页面背景和分区分隔线,线性渐变是默认的正确选择——它最直观易懂,在不同尺寸的元素上表现也最稳定可预期。径向渐变和锥形渐变更适合用于圆形或旋转几何图形本身具有实际意义、而非纯装饰目的的特定视觉效果。

linear-gradient()
颜色沿由角度(0deg = 从下到上,90deg = 从左到右)或关键字(如'to right')定义的直线过渡。这是最常见的类型,用于背景、遮罩层和进度条。支持在任意位置设置多个色标。
radial-gradient()
颜色从中心点向外以圆形或椭圆形辐射扩散。可通过语法控制形状、大小和中心位置。适用于聚光灯效果、暗角效果以及圆形UI元素(如徽章或头像边框)。
conic-gradient()
颜色像时钟指针一样围绕中心点旋转扫描。起始角度可通过'from Xdeg'进行配置。适用于饼图分段、色轮以及旋转加载指示器。至少需要两个色标;在末尾重复首个颜色可创建无缝循环效果。

代码示例

以下是在JavaScript、Python、CSS和Go中以编程方式生成和应用CSS渐变的示例。每个示例均生成有效的CSS渐变字符串,可直接用于样式表或内联样式。

JavaScript
// Generate a CSS linear-gradient string from an array of stops
function buildGradient(angle, stops) {
  const parts = stops.map(s => `${s.color} ${s.position}%`)
  return `linear-gradient(${angle}deg, ${parts.join(', ')})`
}

const stops = [
  { color: '#6366f1', position: 0 },
  { color: '#ec4899', position: 50 },
  { color: '#f59e0b', position: 100 },
]
buildGradient(90, stops)
// -> "linear-gradient(90deg, #6366f1 0%, #ec4899 50%, #f59e0b 100%)"

// Apply to an element
document.querySelector('.hero').style.background = buildGradient(135, stops)
Python
# Generate a CSS gradient string for use in templates or SVGs
def build_gradient(angle: int, stops: list[tuple[str, int]]) -> str:
    parts = [f"{color} {pos}%" for color, pos in stops]
    return f"linear-gradient({angle}deg, {', '.join(parts)})"

stops = [("#6366f1", 0), ("#ec4899", 50), ("#f59e0b", 100)]
print(build_gradient(135, stops))
# -> "linear-gradient(135deg, #6366f1 0%, #ec4899 50%, #f59e0b 100%)"

# Interpolate N colors between two endpoints
def interpolate_hex(c1: str, c2: str, steps: int) -> list[str]:
    r1, g1, b1 = int(c1[1:3], 16), int(c1[3:5], 16), int(c1[5:7], 16)
    r2, g2, b2 = int(c2[1:3], 16), int(c2[3:5], 16), int(c2[5:7], 16)
    return [
        f"#{int(r1+(r2-r1)*i/(steps-1)):02x}"
        f"{int(g1+(g2-g1)*i/(steps-1)):02x}"
        f"{int(b1+(b2-b1)*i/(steps-1)):02x}"
        for i in range(steps)
    ]

interpolate_hex("#6366f1", "#f59e0b", 4)
# -> ['#6366f1', '#9a7399', '#d18042', '#f59e0b']
CSS
/* Linear gradient — left to right */
.hero {
  background: linear-gradient(90deg, #6366f1 0%, #ec4899 50%, #f59e0b 100%);
}

/* Radial gradient — circular spotlight */
.badge {
  background: radial-gradient(circle at 30% 30%, #6366f1, #312e81);
}

/* Conic gradient — color wheel */
.wheel {
  background: conic-gradient(from 0deg, #ef4444, #f59e0b, #22c55e, #3b82f6, #8b5cf6, #ef4444);
  border-radius: 50%;
}

/* Multi-stop with transparency */
.overlay {
  background: linear-gradient(
    to bottom,
    rgba(0, 0, 0, 0) 0%,
    rgba(0, 0, 0, 0.6) 60%,
    rgba(0, 0, 0, 0.9) 100%
  );
}

/* Repeating stripes */
.stripes {
  background: repeating-linear-gradient(
    45deg,
    #6366f1 0 10px,
    transparent 10px 20px
  );
}
Go
package main

import "fmt"

// Stop represents one color stop in a gradient.
type Stop struct {
	Color    string
	Position int // percent 0-100
}

func buildGradient(angle int, stops []Stop) string {
	result := fmt.Sprintf("linear-gradient(%ddeg", angle)
	for _, s := range stops {
		result += fmt.Sprintf(", %s %d%%", s.Color, s.Position)
	}
	return result + ")"
}

func main() {
	stops := []Stop{
		{"#6366f1", 0},
		{"#ec4899", 50},
		{"#f59e0b", 100},
	}
	fmt.Println(buildGradient(135, stops))
	// -> "linear-gradient(135deg, #6366f1 0%, #ec4899 50%, #f59e0b 100%)"
}

常见问题

linear-gradient和radial-gradient有什么区别?
linear-gradient()沿特定角度的直线对颜色进行过渡,而radial-gradient()则从中心点向外以圆形或椭圆形过渡颜色。线性渐变是页面背景和遮罩层的标准选择;径向渐变更适合聚光灯效果和圆形UI元素。
如何设置线性渐变的方向?
使用角度值(例如90deg表示从左到右,180deg表示从上到下)或关键字(to right、to bottom left)。角度从底部顺时针旋转:0deg指向上方,90deg指向右方。也可使用'to top right'指向某个角,浏览器会根据元素的宽高比计算精确角度。
CSS渐变可以添加动画效果吗?
浏览器无法通过CSS过渡直接在两个渐变值之间进行插值。常用的变通方案有:对超大渐变的background-position进行动画处理、使用@property将各个色标值作为自定义属性进行动画处理,或通过伪元素上的opacity实现交叉淡入淡出。@property方案(Chrome和Edge自2020年起支持,Firefox自2024年起支持)是最简洁的解决方案。
一个渐变可以有多少个色标?
CSS规范未设定上限。浏览器处理包含数十个色标的渐变时不会出现性能问题。实际使用中,大多数渐变使用2至5个色标。每个色标可以指定颜色以及可选的百分比或长度位置值。你也可以为每个色标定义两个位置,从而创建无过渡的硬切色带。
渐变和图片有什么区别?
在CSS中,渐变是一种计算图像。它与url()图像共享相同的渲染管线,凡是图像值有效的地方均可使用:background-image、list-style-image、border-image和mask-image。区别在于,渐变由浏览器在渲染时生成,可无损缩放至任意尺寸,且不会因为不需要下载文件而增加页面体积。
如何创建无过渡的硬切色标?
在同一位置放置两个色标即可。例如,linear-gradient(to right, #6366f1 50%, #ec4899 50%)会在两种颜色之间创建清晰的分割,没有任何混合过渡。也可使用双位置语法:linear-gradient(to right, #6366f1 0% 50%, #ec4899 50% 100%),以明确定义每个色带的范围。
conic-gradient函数在所有浏览器中都受支持吗?
conic-gradient()在Chrome 69+、Firefox 83+、Safari 12.1+和Edge 79+中均受支持。截至2024年,根据Can I Use的数据,全球浏览器支持率超过95%。无需供应商前缀。对于仍在使用旧版浏览器的少数用户,可在渐变声明前设置纯色background-color作为回退方案。