CSS渐变生成器
可视化构建线性和径向CSS渐变,并复制CSS代码
色标
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定义了五种渐变函数。三种主要类型(线性、径向、锥形)各有一个重复变体,用于平铺图案。repeating-linear-gradient()和repeating-radial-gradient()适用于条纹背景和同心环效果。所有渐变函数均接受任意CSS颜色格式的色标:HEX、RGB、HSL、命名颜色或oklch。五种函数在Chrome、Firefox、Safari和Edge中均有实际全面的浏览器支持,无需供应商前缀。
| 函数 | 示例语法 | 方向 | 常见用途 |
|---|---|---|---|
| linear-gradient() | to right, #f00, #00f | Straight line | Backgrounds, hero sections, progress bars |
| radial-gradient() | circle, #f00, #00f | Outward from center | Spotlight effects, buttons, badges |
| conic-gradient() | from 0deg, #f00, #00f | Sweep around center | Pie charts, color wheels, spinners |
| repeating-linear | to right, #f00 0 10px, #00f 10px 20px | Tiled line | Stripes, progress indicators, decorative borders |
| repeating-radial | circle, #f00 0 10px, #00f 10px 20px | Tiled circle | Concentric ring patterns, retro textures |
线性渐变、径向渐变与锥形渐变的对比
每种渐变类型将颜色映射到几何图形的方式各不相同。选择哪种类型取决于你需要的视觉效果,而非它们之间的质量差异。对于大多数页面背景和分区分隔线,线性渐变是默认的正确选择——它最直观易懂,在不同尺寸的元素上表现也最稳定可预期。径向渐变和锥形渐变更适合用于圆形或旋转几何图形本身具有实际意义、而非纯装饰目的的特定视觉效果。
代码示例
以下是在JavaScript、Python、CSS和Go中以编程方式生成和应用CSS渐变的示例。每个示例均生成有效的CSS渐变字符串,可直接用于样式表或内联样式。
// 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)# 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']/* 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
);
}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%)"
}