字体那点事儿
这篇单独聊聊字体那点事儿,本打算放到字体图标那些事儿里边,但是可能会导致篇幅太长了,故而拎出来,单独聊聊。
Web 字体工作原理
- 浏览器加载页面,对 HTMl 进行解析渲染
- 将字体转化为对应的 unicode 编码
- 如果没有设置 font-family,使用默认字体
- 设置了 font-family,根据设置的 font-family 查找对应的字体文件,如果有自定义字体 font-face,则先进行 5
- 加载 font-face 指定的字体文件
- 根据步骤2中的 unicode 码,在字体文件中找到对应的字体外形,然后绘制在页面上
font-family
字体系列
每个 font-family 都包含一组具有共同特征的字体。看看五大字体类型:
字体系列 | 特征 | 示例 |
---|---|---|
Serif | 衬线字体:字母末端含有装饰性的「小细线」,新闻报纸文字排版 | Times、Times New Roman、Georgia |
Sans-serif | 非衬线字体:不含有衬线,通常用于计算机屏幕字体 | Verdana、Arial |
Monospace | 等宽字体:每个字母在水平方向所占的宽度一致,通常用于代码展示 | Courier、Andale Mono |
Cursive | 手写体:类似手写效果,标题中常见 | Comic Sans、Apple Chancery |
Fantasy | 具有某种风格的装饰性字体 | Last Ninja、Impact |
效果预览:
CSS 中指定 font-family
本质:指定一个首选字体列表。CSS 会根据这个列表设置的字体顺序选择第一个可用的字体。越靠前,优先级就越高。
1 | body { |
不存在的字体
在设置font-family
时,一般都会在末尾添加 Serif
或者 Sans Serif
,真的存在这种字体名称的字体么?
不存在的。使用 Serif
和 Sans Serif
,实际上表示,使用系统默认的该字体系列的字体,不同的操作系统或平台可能存在差异。
font-family 最佳实践
font-family 的本质是一个字体的优先级列表,比较靠谱的策略如下:
- 将最希望使用的字体放在靠前的位置
- 由于用户可能没有安装相应的字体,需要指定同字体系列的字体,最为备选方案
- 提供一个任何平台上都可能有的字体
- 最后提供一个字体系列,当以上都不满足时,由系统指定默认的字体
font-face
字体格式
字体 | 文件后缀 | 详情 |
---|---|---|
TrueType 字体 | .ttf | TrueType 和 OpenType 字体紧密相关,OpenType 建立在 TrueType 基础之上,比 TrueType 更新 |
OpenType 字体 | .otf | 见上 |
Emmbedded OpenType | .eot | Embedded OpenType(EOT)是 OpenType 的一种压缩形式。这种格式是 Microsoft 专用的,仅 IE 提供支持 |
SVG 字体 | .svg | 通用图像格式,SVG 使用这种格式标志字符 |
Web 开放字体格式 | .woff | Web 开放字体格式建立在 TrueType 之上,已经发展为 web 字体的一个标准,大多数现代浏览器对这种格式提供了很好的支持 |
CSS 中 @font-face 干了啥
- 指定自定义字体的名称,通过 font-family 设置
- 告诉浏览器:加载由 src 指定的字体文件。浏览器会尝试加载每一个 src 文件,直到找到一个它能支持的文件
- 一旦加载,就能使用 font-family 指定的名称的字体了
1 | @font-face { |
font-face 引发的性能危机
后期补充
字体高度
设置一个字体高度为 font-size: 14px
,说明这个字母的最低部分与最高部分之间有 14像素,示意图见下:
写在最后:
免费字体下载:911fonts
字体服务:google fonts