04文本效果与字体

文字阴影给文字加「层次」,换行策略治好「长串撑破容器」, @font-face 让网页用上系统里没有的字体—— 排版质感的三块拼图

约 30 分钟 5 个动手实验 排版质感三拼图

一、text-shadow:文字的影子

语法和 box-shadow 是表亲:x 偏移 y 偏移 模糊 颜色, 但没有扩散半径、没有 inset。 同样支持逗号分隔的多层阴影——立体字、发光字、描边字全靠「叠加」这一个动作。

text-shadow 与 box-shadow 语法对比
对比项text-shadowbox-shadow
参数x 偏移 y 偏移 模糊 颜色x 偏移 y 偏移 模糊 扩散 颜色
扩散半径没有有(正外扩 / 负内收)
inset 内阴影没有
多层叠加逗号分隔逗号分隔
作用对象文字的笔画整个盒子的外沿
四种字效同台——把发光字的模糊半径改成 8px / 20px / 36px 看光晕扩散;把描边字的 4 个方向阴影改成纯色白边
浅色页面上的通用小技巧:text-shadow: 0 1px 0 #fff ——一道若有若无的白边,让文字在花哨背景上「浮」起来。

二、word-break 与 overflow-wrap:长串怎么办

默认换行规则里,一个完整的「词」不允许被拆开。 中文没有这个问题(每个字都能断),但英文长单词、长 URL、哈希串会一根筋撑到底, 把容器顶破。两个属性对症下药:

断词三大写法:行为与适用场景
属性写法行为适用
word-break: break-all无情拆词:一到边界就断,不管单词完不完整URL、哈希串等「无词义」文本
overflow-wrap: break-word先尝试整词换行,实在放不下才拆(旧名 word-wrap)通用推荐,尊重词完整性
word-break: keep-all连中日韩文字也不许断特殊排版要求
同一串长 URL 三种策略——第一个盒子被撑破;把 .c 的 overflow-wrap 改成 break-all,看它和第二个盒子行为一样了
中文站点正文一般用 overflow-wrap: break-word(尊重词完整性); break-all 会把英文单词拦腰斩断,仅用于 URL、编号这类无词义长串。

三、white-space:换行总开关

它管的是源码里的空格和换行怎么处理: 默认(normal)全部折叠合并;pre 全部保留(像 <pre> 标签); nowrap 一行到底不许换。五个值一张表:

white-space 五值全解:空格、换行、自动折行的组合
空格源码换行自动换行典型用途
normal(默认)合并忽略正文段落
nowrap合并忽略单行省略号的前置条件
pre保留保留展示代码 / 格式化文本
pre-wrap保留保留既要格式又能折行
pre-line合并保留保留作者换行、折叠空格
注意 pre 盒子里「三个空格」和换行原样显示——把 .pre 改成 pre-wrap,看它放不下时会不会自动折行

四、text-overflow:ellipsis 回顾

在「布局 · 溢出处理」一课用过它,这里正式收编进文本效果家族。 单行省略号是三件套,缺一不可—— 只写 text-overflow: ellipsis 是不生效的经典大坑:

单行省略 vs 两行截断——把第二个盒子的 -webkit-line-clamp: 2 改成 3,多看一行
口诀:「nowrap 圈住,hidden 剪掉,ellipsis 补刀」。 忘了前两步,省略号永远不出现。

五、@font-face:注册自定义字体

系统里没有的字体,可以把字体文件变成网页资源: 用 @font-face 注册一个自定义名字,再在 font-family 里引用。 它就是「给字体上户口」:

引用时的回退链机制值得亲眼看看—— 浏览器从左往右找,找到第一个「装了」的字体就用它:

同一句话、三种字体栈——把你电脑上没装的字体放最前面,看它回退到下一个;把情绪换成「黑体 / 宋体」看气质不同
srcurl() + format() 成对出现, 浏览器跳过不认识的格式继续往下找——和第 1 课的「属性回退」是同一个思想。

六、字体加载实践:快、省、稳

字体好看,但每个字体文件都是一次网络请求。 中文字体动辄几 MB(几万个字形),直接 @font-face 整包引入会让用户对着空白页面干等。实践三条路:

中文字体加载四大方案:做法与适用场景
方案做法适用
系统字体栈(默认首选)font-family 列一串系统字体正文——零加载、零闪烁
web 字体子集化按页面实际用到的字符把大字体切成小包,按需加载中文标题、品牌字
在线字体库「在线字体库」类服务已做好分包,一行引入想省事地用中文字体
字体图标@font-face 注册图标字体,图标即字形小图标(如今更多用 SVG 方案)
排版功底 = 细节克制:字号不超过 3 档、行高 1.6~1.9、正文 14~16px。 你正在读的这套页面就是——衬线标题 + 无衬线正文 + line-height: 1.8

七、本章小结

  • text-shadow:x y 模糊 颜色(无扩散无 inset);多层叠加出立体 / 发光 / 描边三种字效
  • word-break: break-all 见缝就断;overflow-wrap: break-word 仁慈拆词(正文推荐)
  • white-space:nowrap 不换行、pre 全保留、pre-wrap 保留 + 折行
  • 单行省略号三件套:nowrap + overflow: hidden + text-overflow: ellipsis;多行用 -webkit-line-clamp
  • @font-face:font-family 起名 + src 多格式回退(+ font-display: swap 防闪空)
  • 字体策略:正文用系统字体栈,中文标题用子集化 web 字体;引用时永远带兜底链
动手练习:把第一节实验台里的「发光字」改成你的专属霓虹—— 换成 #C08A3E 赭金色的三层光晕,再把模糊半径改成 8px / 20px / 36px 看光晕怎么扩散; 然后给第二节的 URL 盒子加上省略号三件套,做一个「不撑破也不露馅」的长链接卡片。