CSS: 渐变与阴影

最后更新:2026-10-13

本节涉及属性: box-shadow text-shadow

1. 渐变(Gradient)

渐变是在两种或多种颜色之间平滑过渡的效果。CSS 提供了线性渐变、径向渐变和锥形渐变。

(1) 渐变与阴影属性速查表

属性/函数 常用值 作用
linear-gradient() red, blue, to right, #f00, #00f, 45deg, #ff0, #f0f 线性渐变(方向+色标)
radial-gradient() circle, red, blue, ellipse at center, #fff, #333 径向渐变(从中心向外扩散)
conic-gradient() from 0deg, red, yellow, green 锥形渐变(从中心旋转)
box-shadow 2px 2px 5px rgba(0,0,0,0.3) 盒子阴影(水平+垂直偏移+模糊+颜色)
text-shadow 1px 1px 2px rgba(0,0,0,0.5) 文本阴影(水平+垂直偏移+模糊+颜色)

(2) 线性渐变 linear-gradient

💡 渐变工具推荐: 手写渐变比较难记角度和色标位置,推荐用 cssgradient.io 在线工具拖拽生成,然后复制代码。你用得越多,渐变的直觉越好。

颜色沿一条直线方向过渡:

▶ 示例

▶ 试一试

方向值:

CSS
/* 使用关键字 */
linear-gradient(to top, ...)      /* 从下往上 */
linear-gradient(to right, ...)    /* 从左往右 */
linear-gradient(to bottom right, ...) /* 从左上到右下 */

/* 使用角度(更精确) */
linear-gradient(0deg, ...)    /* 从下到上(相当于 to top) */
linear-gradient(90deg, ...)   /* 从左到右(相当于 to right) */
linear-gradient(180deg, ...)  /* 从上到下(默认) */

颜色节点位置:

▶ 示例

▶ 试一试

(3) 径向渐变 radial-gradient

颜色从一个中心点向四周辐射:

▶ 示例

▶ 试一试

(4) 锥形渐变 conic-gradient

颜色围绕中心点旋转变化:

▶ 示例

▶ 试一试

(5) 重复渐变

▶ 示例

▶ 试一试

(6) 渐变的实际应用

渐变按钮:

▶ 示例

▶ 试一试

渐变遮罩:

▶ 示例

▶ 试一试

2. 阴影(Shadow)

CSS 提供了两种阴影:文本阴影和盒子阴影。

(1) 文本阴影 text-shadow

✅ 阴影的层次感: 适度使用阴影能增加页面的层次感。"真实"的阴影通常偏软(blur 值大一点),颜色偏暗但不是纯黑。用 rgba(0,0,0,0.15) 代替纯黑更自然。

▶ 示例

▶ 试一试

(2) 盒子阴影 box-shadow

📌 阴影分层: 一个元素可以有多个阴影,用逗号分隔。比如 .card { box-shadow: 0 2px 8px rgba(0,0,0,0.1), 0 8px 32px rgba(0,0,0,0.08); } 做出双层阴影的立体效果。

▶ 示例

▶ 试一试

box-shadow 参数说明:

CSS
/* box-shadow 参数:水平偏移 垂直偏移 模糊半径 扩散半径 颜色 内阴影 */
box-shadow: h-offset v-offset blur spread color inset;
参数 说明
h-offset 水平偏移量(必填),正数向右
v-offset 垂直偏移量(必填),正数向下
blur 模糊半径(可选),越大越模糊
spread 扩散半径(可选),正数让阴影变大
color 颜色(可选)
inset 改为内阴影(可选)

常见阴影效果:

▶ 示例

▶ 试一试

(3) drop-shadow(滤镜阴影)

filter: drop-shadow() 与 box-shadow 不同,它会跟随元素的实际轮廓(包括透明部分):

▶ 示例

▶ 试一试

本节涉及属性: box-shadow text-shadow

❓ 常见问题

Q 渐变颜色写起来很复杂,有什么工具推荐?
A 推荐 cssgradient.io 和 webgradients.com,在线拖拽生成渐变代码,直接复制使用。多看看别人的渐变配色方案,慢慢就有感觉了。手写渐变的难点主要在角度和色标位置的直觉。
Q box-shadow 可以做多个阴影吗?
A 可以,用逗号分隔多个阴影值。比如 box-shadow: 0 2px 8px rgba(0,0,0,0.1), 0 8px 32px rgba(0,0,0,0.08); 做出双层阴影效果。多个阴影按声明顺序叠加,先写的在上层。
Q text-shadow 和 box-shadow 有什么区别?
A text-shadow 作用于文字本身,没有扩散(spread)参数,不支持内阴影。box-shadow 作用于元素的整个盒子,有 spread 参数,支持 inset 内阴影。两者的语法类似但能力不同。

📖 小节

📝 作业

  1. 使用 linear-gradient 创建一个渐变按钮——从左侧颜色渐变为右侧颜色,鼠标悬停时渐变方向改变。
  2. 制作一个"悬浮卡片"效果——卡片默认有轻微阴影,鼠标悬停时阴影加深并上移,产生"抬起来"的立体感。
  3. 使用 repeating-linear-gradient 创建条纹背景图案。
  4. 给一个 PNG 图标或文字添加 text-shadow 或 drop-shadow 发光效果。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏