CSS 渐变
渐变是 CSS 中用于创建平滑颜色过渡的强大工具。通过渐变,你可以创建从一种颜色到另一种颜色的平滑过渡,或者创建复杂的多色渐变效果,无需使用图片。
为什么需要这个特性
渐变解决了以下问题:
- 视觉效果:创建平滑的颜色过渡,增强视觉吸引力
- 减少图片:使用 CSS 渐变代替背景图片,减少 HTTP 请求
- 灵活性:可以动态调整渐变方向和颜色
- 性能:CSS 渐变比图片加载更快
- 响应式:渐变可以随容器大小自适应
核心概念解释
渐变是一种图像,由两种或多种颜色之间的平滑过渡组成。CSS 支持三种类型的渐变:
- 线性渐变(Linear Gradient):沿着一条直线过渡
- 径向渐变(Radial Gradient):从中心点向外辐射过渡
- 圆锥渐变(Conic Gradient):围绕中心点旋转过渡
线性渐变
线性渐变沿着一条直线创建颜色过渡。
基本语法
background: linear-gradient(direction, color1, color2, ...);
方向
可以使用关键字或角度指定渐变方向:
/* 关键字 */
.element {
background: linear-gradient(to right, red, blue); /* 从左到右 */
background: linear-gradient(to bottom, red, blue); /* 从上到下 */
background: linear-gradient(to top right, red, blue); /* 到右上角 */
}
/* 角度 */
.element {
background: linear-gradient(45deg, red, blue); /* 45 度角 */
background: linear-gradient(90deg, red, blue); /* 90 度(从上到下) */
background: linear-gradient(180deg, red, blue); /* 180 度(从右到左) */
}
颜色停止点
可以指定颜色的位置:
.element {
background: linear-gradient(to right, red 0%, blue 100%);
background: linear-gradient(to right, red 0%, yellow 50%, blue 100%);
background: linear-gradient(to right, red, yellow 30%, blue);
}
多色渐变
可以添加多个颜色:
.element {
background: linear-gradient(to right, red, orange, yellow, green, blue, indigo, violet);
}
透明度渐变
可以创建透明到不透明的渐变:
.element {
background: linear-gradient(to bottom, rgba(0,0,0,0), rgba(0,0,0,0.8));
/* 从透明到半透明黑色 */
}
径向渐变
径向渐变从中心点向外辐射创建颜色过渡。
基本语法
background: radial-gradient(shape size at position, color1, color2, ...);
形状和大小
.element {
background: radial-gradient(circle, red, blue); /* 圆形 */
background: radial-gradient(ellipse, red, blue); /* 椭圆形 */
background: radial-gradient(circle at center, red, blue); /* 指定位置 */
background: radial-gradient(circle 100px, red, blue); /* 指定大小 */
}
位置
可以指定渐变的中心位置:
.element {
background: radial-gradient(circle at top left, red, blue);
background: radial-gradient(circle at 30% 50%, red, blue);
background: radial-gradient(circle at 100px 100px, red, blue);
}
大小关键字
.element {
background: radial-gradient(closest-side, red, blue);
background: radial-gradient(farthest-side, red, blue);
background: radial-gradient(closest-corner, red, blue);
background: radial-gradient(farthest-corner, red, blue);
}
圆锥渐变
圆锥渐变围绕中心点旋转创建颜色过渡。
基本语法
background: conic-gradient(from angle at position, color1, color2, ...);
示例
.element {
background: conic-gradient(red, yellow, green, blue, red);
background: conic-gradient(from 45deg, red, blue);
background: conic-gradient(from 0deg at 50% 50%, red, yellow, green, blue, red);
}
常见用法
1. 按钮渐变
.button {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
padding: 12px 24px;
border-radius: 8px;
}
.button:hover {
background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
}
2. 卡片背景
.card {
background: linear-gradient(to bottom, #fff, #f5f5f5);
border-radius: 8px;
padding: 20px;
}
3. 遮罩效果
.hero {
background-image: url("hero.jpg");
background-size: cover;
position: relative;
}
.hero::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to bottom, transparent, rgba(0,0,0,0.7));
}