04文本效果与字体
文字阴影给文字加「层次」,换行策略治好「长串撑破容器」,
@font-face 让网页用上系统里没有的字体——
排版质感的三块拼图。
一、text-shadow:文字的影子
语法和 box-shadow 是表亲:x 偏移 y 偏移 模糊 颜色,
但没有扩散半径、没有 inset。
同样支持逗号分隔的多层阴影——立体字、发光字、描边字全靠「叠加」这一个动作。
| 对比项 | text-shadow | box-shadow |
|---|---|---|
| 参数 | x 偏移 y 偏移 模糊 颜色 | x 偏移 y 偏移 模糊 扩散 颜色 |
| 扩散半径 | 没有 | 有(正外扩 / 负内收) |
| inset 内阴影 | 没有 | 有 |
| 多层叠加 | 逗号分隔 | 逗号分隔 |
| 作用对象 | 文字的笔画 | 整个盒子的外沿 |
8px / 20px / 36px 看光晕扩散;把描边字的 4 个方向阴影改成纯色白边基础投影x=0 y=2 blur=4
立体字三层下移 + 环境影
发光字0 偏移,纯模糊多层
描边字四向 1px 硬阴影
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 | 连中日韩文字也不许断 | 特殊排版要求 |
.c 的 overflow-wrap 改成 break-all,看它和第二个盒子行为一样了overflow-wrap: break-word(尊重词完整性);
break-all 会把英文单词拦腰斩断,仅用于 URL、编号这类无词义长串。三、white-space:换行总开关
它管的是源码里的空格和换行怎么处理:
默认(normal)全部折叠合并;pre 全部保留(像 <pre> 标签);
nowrap 一行到底不许换。五个值一张表:
| 值 | 空格 | 源码换行 | 自动换行 | 典型用途 |
|---|---|---|---|---|
| normal(默认) | 合并 | 忽略 | 是 | 正文段落 |
| nowrap | 合并 | 忽略 | 否 | 单行省略号的前置条件 |
| pre | 保留 | 保留 | 否 | 展示代码 / 格式化文本 |
| pre-wrap | 保留 | 保留 | 是 | 既要格式又能折行 |
| pre-line | 合并 | 保留 | 是 | 保留作者换行、折叠空格 |
.pre 改成 pre-wrap,看它放不下时会不会自动折行四、text-overflow:ellipsis 回顾
在「布局 · 溢出处理」一课用过它,这里正式收编进文本效果家族。
单行省略号是三件套,缺一不可——
只写 text-overflow: ellipsis 是不生效的经典大坑:
-webkit-line-clamp: 2 改成 3,多看一行五、@font-face:注册自定义字体
系统里没有的字体,可以把字体文件变成网页资源:
用 @font-face 注册一个自定义名字,再在 font-family 里引用。
它就是「给字体上户口」:
引用时的回退链机制值得亲眼看看—— 浏览器从左往右找,找到第一个「装了」的字体就用它:
src 里 url() + format() 成对出现,
浏览器跳过不认识的格式继续往下找——和第 1 课的「属性回退」是同一个思想。六、字体加载实践:快、省、稳
字体好看,但每个字体文件都是一次网络请求。
中文字体动辄几 MB(几万个字形),直接 @font-face 整包引入会让用户对着空白页面干等。实践三条路:
| 方案 | 做法 | 适用 |
|---|---|---|
| 系统字体栈(默认首选) | font-family 列一串系统字体 | 正文——零加载、零闪烁 |
| web 字体子集化 | 按页面实际用到的字符把大字体切成小包,按需加载 | 中文标题、品牌字 |
| 在线字体库 | 「在线字体库」类服务已做好分包,一行引入 | 想省事地用中文字体 |
| 字体图标 | @font-face 注册图标字体,图标即字形 | 小图标(如今更多用 SVG 方案) |
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 盒子加上省略号三件套,做一个「不撑破也不露馅」的长链接卡片。