Skip to content

Commit 12b7a63

Browse files
committed
docs(frontend): 添加前端字体和Next.js字体使用速查表
添加两份文档分别介绍通用前端字体知识和Next.js项目中字体使用的最佳实践,包括字体加载策略、性能优化和与Tailwind CSS的集成
1 parent 7f5faf4 commit 12b7a63

2 files changed

Lines changed: 429 additions & 0 deletions

File tree

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
### **前端字体知识速查表 (通用版)**
2+
3+
本速查表旨在帮助你掌握在任何 web 项目中处理字体的核心技术和最佳实践。
4+
5+
---
6+
7+
### **1. 基础概念:字体类型**
8+
9+
* **系统字体 (System Fonts)**: 用户操作系统中预装的字体(如 Arial, Helvetica, 微软雅黑, 苹方)。
10+
* **优点**: 无需下载,加载速度最快,零性能开销。
11+
* **缺点**: 无法保证在所有操作系统上显示一致,设计选择有限。
12+
* **CSS 示例**: `font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;`
13+
14+
* **网页字体 (Web Fonts)**: 存放在远程服务器或项目本地的字体文件,通过 CSS 的 `@font-face` 规则加载。
15+
* **优点**: 保证所有用户看到完全一致的品牌字体,设计选择无限。
16+
* **缺点**: 需要下载,会产生性能开销,需要进行优化。
17+
18+
---
19+
20+
### **2. 加载网页字体:`@font-face` 规则**
21+
22+
这是在 CSS 中声明并加载自定义字体的核心机制。
23+
24+
```css
25+
@font-face {
26+
/* 1. 定义你的字体族名称,在 CSS 中通过这个名字使用它 */
27+
font-family: 'MyCustomFont';
28+
29+
/* 2. 指定字体文件路径和格式 (最佳实践:WOFF2 优先) */
30+
src:
31+
/* 现代浏览器首选,压缩率最高 */
32+
url('/fonts/my-font.woff2') format('woff2'),
33+
/* 兼容旧版浏览器的后备选项 */
34+
url('/fonts/my-font.woff') format('woff');
35+
36+
/* 3. 关联字重和样式,以便 font-weight/font-style 能正确工作 */
37+
font-weight: 400; /* 或 normal */
38+
font-style: normal;
39+
40+
/* 4. 定义加载策略,swap 是最佳实践 */
41+
font-display: swap;
42+
}
43+
44+
/* 为粗体定义另一个 @font-face 规则 */
45+
@font-face {
46+
font-family: 'MyCustomFont';
47+
src:
48+
url('/fonts/my-font-bold.woff2') format('woff2'),
49+
url('/fonts/my-font-bold.woff') format('woff');
50+
font-weight: 700; /* 或 bold */
51+
font-style: normal;
52+
font-display: swap;
53+
}
54+
55+
```
56+
57+
58+
59+
---
60+
61+
### **3. 字体格式对比**
62+
63+
| 格式 | 全称 | 推荐度 | 描述 |
64+
| :--- | :--- | :--- | :--- |
65+
| **WOFF2** | Web Open Font Format 2 | ⭐⭐⭐⭐⭐ **(首选)** | 专为 Web 设计,使用 Brotli 压缩,**文件体积最小**,加载最快。所有现代浏览器都支持。 |
66+
| **WOFF** | Web Open Font Format | ⭐⭐⭐⭐ **(后备)** | 专为 Web 设计,压缩率良好,**兼容性极佳**,可作为兼容旧版浏览器的后备。 |
67+
| **TTF / OTF** | TrueType / OpenType Font | ⭐⭐ (仅作源文件) | 桌面字体格式,**文件体积大**,不适合直接在生产环境的 Web 上使用。应作为生成 WOFF/WOFF2 的源文件。 |
68+
| **EOT** | Embedded OpenType | (废弃) | 仅用于兼容古董级的 IE 浏览器 (IE8 及以下)。现代项目完全无需考虑。 |
69+
70+
---
71+
72+
### **4. 性能优化与加载策略 `font-display`**
73+
74+
`font-display` 决定了字体加载期间文本的显示方式,直接影响用户体验和核心网页指标。
75+
76+
|| 行为描述 | 用户体验 | 建议 |
77+
| :--- | :--- | :--- | :--- |
78+
| `swap` | **立即使用后备字体,加载完后交换。** | **FOUT** (无样式文本闪烁),但内容立即可见。 | ⭐⭐⭐⭐⭐ **(最佳实践)** |
79+
| `block` | 短暂**隐藏文本** (~3s),等待字体加载。 | **FOIT** (不可见文本闪烁),体验差。 | ⭐ (不推荐) |
80+
| `fallback`| 极短暂隐藏 (~100ms),然后用后备字体,若超时则不再交换。| 在慢速网络下避免后期布局跳动。| ⭐⭐⭐ (特定场景可用) |
81+
| `optional`| 极短暂隐藏 (~100ms),若不能瞬时从缓存加载,则直接放弃。| 对性能影响最小,但用户可能看不到自定义字体。| ⭐⭐ (字体不重要时) |
82+
83+
---
84+
85+
### **5. 核心 CSS 字体属性**
86+
87+
88+
89+
* `font-family`: 指定字体族。**务必提供一个后备字体栈**
90+
91+
```css
92+
body {
93+
/* 浏览器会依次尝试,直到找到一个可用的字体 */
94+
font-family: 'MyCustomFont', 'Helvetica Neue', Arial, sans-serif;
95+
}
96+
```
97+
98+
* `font-weight`: 设置字重。值可以是 `normal`(400), `bold`(700),或 100 到 900 的数字。它会匹配 `@font-face` 中定义的 `font-weight`
99+
100+
* `font-style`: 设置字体样式,主要是 `normal` (正常) 或 `italic` (斜体)。
101+
102+
* `font-size`: 设置字体大小。推荐使用相对单位,如 `rem``em`,以获得更好的可访问性。
103+
104+
* `line-height`: 设置行高。**最佳实践是使用一个无单位的数字**(如 `1.5`),它会根据 `font-size` 自动计算,避免继承问题。
105+
106+
* `font` (简写属性): 可以一次性设置多个属性,但顺序很严格,且容易重置未指定的属性,需谨慎使用。
107+
```css
108+
/* 顺序:font-style font-weight font-size/line-height font-family */
109+
p {
110+
font: italic 700 16px/1.5 'MyCustomFont', sans-serif;
111+
}
112+
```
113+
114+
---
115+
116+
### **6. 进阶字体特性**
117+
118+
#### **可变字体 (Variable Fonts)**
119+
120+
一个字体文件包含了多个样式(如不同字重、字宽、斜度)。
121+
122+
* **优点**: 大大减少 HTTP 请求次数和总体积,设计灵活性极高。
123+
* **CSS 使用**:
124+
```css
125+
@font-face {
126+
font-family: 'MyVariableFont';
127+
src: url('my-variable-font.woff2') format('woff2-variations');
128+
font-weight: 100 900; /* 声明支持的字重范围 */
129+
}
130+
131+
.heavy {
132+
/* 可以使用 100-900 之间的任意值,不再局限于 400/700 */
133+
font-weight: 850;
134+
}
135+
```
136+
137+
#### **OpenType 特性**
138+
139+
通过 `font-feature-settings` 或更现代的 `font-variant-*` 属性,可以开启字体中内置的高级排版功能。
140+
141+
* **常见特性**:
142+
* **连字 (Ligatures)**: 将特定字符组合(如 `fi`, `fl`)替换为单个优美的字形。`font-variant-ligatures: common-ligatures;` (默认开启)
143+
* **字偶距微调 (Kerning)**: 调整特定字符对之间的间距(如 `AV`)。`font-kerning: normal;` (默认开启)
144+
* **数字样式**: 等宽数字、比例数字、旧式数字等。`font-variant-numeric: tabular-nums;` (用于表格对齐)
145+
146+
```css
147+
.price-table {
148+
/* 让表格中的所有数字等宽,确保小数点能完美对齐 */
149+
font-variant-numeric: tabular-nums;
150+
}
151+
```

0 commit comments

Comments
 (0)