Menu

CSS text-shadow 文字阴影:语法、发光、描边与示例

text-shadow 在文字后面绘制一个或多个阴影。本文讲解它的四个值(x 偏移、y 偏移、模糊、颜色),如何叠加多个阴影做出发光、描边和 3D 效果,以及如何用阴影让文字在复杂背景上保持清晰可读。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

text-shadow 的工作原理

text-shadow 在文字后面绘制一份经过移动和模糊的文字副本。你需要提供水平偏移、垂直偏移、可选的模糊值和颜色。

3px 3px 0 #f59e0b 表示向右 3px(物理方向,在任何书写方向下都一样)、向下 3px、不模糊、琥珀色。第二个阴影模糊 6px,使用半透明的黑色,这是营造细微立体感的常用配方。

语法

text-shadow: <offset-x> <offset-y> <blur-radius>? <color>?;
值是否必填含义
offset-x是正值把阴影向右移,负值向左移
offset-y是正值把阴影向下移,负值向上移
blur-radius否(默认为 0)边缘的柔和程度;负值无效
color否(默认为文字颜色)可以写在最前面或最后面

text-shadow: none 可以去掉继承来的阴影。修改下面的值,看看每个值的效果:

试试 -4px -4px 0 #16a34a、0 0 10px red,以及用逗号分隔的两个阴影。

多重阴影:发光、描边与 3D

用逗号可以叠加多个阴影;第一个绘制在最上面。这一条规则就能做出三种效果:

  • 发光: 偏移为零,模糊逐渐增大,放在深色背景上。
  • 描边: 四个没有模糊的阴影,每条对角线方向一个。它适合细的描边;如果想要更粗且均匀的描边,可以改用 -webkit-text-stroke: 2px #111827 在字母边缘绘制轮廓线(虽然带有前缀,但所有当前浏览器都支持)。
  • 3D: 一串没有模糊的阴影,每个比前一个多偏移 1px,让字母看起来像是挤压出来的立体字。

让文字在复杂背景上保持可读

照片或图案上的白色文字,在背景较亮的地方会丢失边缘。一个柔和的深色阴影可以把边缘找回来,而且不会出现可见的方框:

阴影有帮助,但并不能保证对比度。对于叠在图片上的长段文字,还要在文字后面加一层纯色或渐变遮罩。

text-shadow 与 box-shadow 的区别

text-shadowbox-shadow
跟随的形状字母的形状元素的盒子(及其圆角)
扩展值没有有
inset没有有
多个阴影,用逗号分隔支持支持

卡片和按钮上的阴影,请看 box-shadow。

常见错误

  • 在正文上使用又重又深的阴影。 它们会让字母的形状变模糊。阴影只用在标题和简短的标签上。
  • 忘了写第二个偏移量。 text-shadow: 2px #000 是无效的;两个偏移量都必须写。
  • 模糊值为负数。 它是无效的,整条声明都会被丢弃。
  • 以为阴影会占据空间。 它只是绘制出来的;很大的阴影可能会盖住下一行,或者被 overflow: hidden 裁掉。
  • 在浅色背景上做发光效果。 白底上的浅色光晕是看不见的。发光效果需要深色背景。

常见问题

text-shadow 的语法是什么?

text-shadow: offset-x offset-y blur-radius color;,例如 text-shadow: 2px 2px 4px rgb(0 0 0 / 40%);。两个偏移量是必填的;模糊默认为 0,颜色默认为文字颜色。

如何添加多个文字阴影?

用逗号分隔各个阴影:text-shadow: 0 0 4px #fff, 0 0 12px #2563eb;。第一个阴影绘制在后面那些阴影的上方。

如何给文字做发光效果?

使用没有偏移、带有模糊的阴影,通常叠加几个模糊逐渐增大的阴影:text-shadow: 0 0 4px #60a5fa, 0 0 12px #2563eb;。在深色背景上,它看起来就像霓虹灯的光晕。

text-shadow 像 box-shadow 一样有扩展值吗?

没有。text-shadow 既没有扩展值,也没有 inset 关键字。想让字母周围的阴影更粗,可以叠加多个阴影,或者用 -webkit-text-stroke 做描边。

text-shadow 会影响布局吗?

不会。阴影只是绘制出来的;它不占空间,也不会推动周围的内容,所以很大的阴影可能会盖住附近的元素。

Coddy 编程语言插图

和 Coddy 一起学编程

开始