六维教程

CSS 字体样式

为什么先聊字体

打开一个网页,最先感受到的往往不是布局,而是文字长什么样。字体选得好,页面立刻专业起来,所以文本篇从字体开始。这一篇把 font-family、font-size、font-weight 这些基础属性一次讲透。

font-family 字体栈

font-family 指定元素用什么字体,可以写一串,用英文逗号隔开,浏览器从左到右逐个尝试,哪个能用就用哪个。这串候选名单就叫字体栈。

body {
  /* 依次尝试,本机有的字体优先命中 */
  font-family: "PingFang SC", "Microsoft YaHei", "Helvetica Neue", sans-serif;
}

上面这行在 Mac 上会命中苹方,在 Windows 上会命中微软雅黑。如果用户机器上都没有这些字体,最后会落到 sans-serif 兜底。通用的字体族一共五个,见下表。

字体族 风格 注意事项
serif 衬线体,笔画末端有装饰 适合正文阅读,如宋体
sans-serif 无衬线体,线条干净 屏幕显示首选,如微软雅黑
monospace 等宽字体 代码、表格对齐场景好用
cursive 手写体 中文系统上可选较少
fantasy 装饰体 很少用,仅兜底备用

字体栈最后一定要放一个通用字体族,不然遇到没有的字体,浏览器会退回默认字体,效果不可控。

中文字体名要加引号,比如 “微软雅黑”、”宋体”。多个英文单词的字体名同样要加引号,比如 “Times New Roman”。单个英文词可以不引,不过为了统一,建议都加上。

font-size 字号

浏览器默认字号是 16px。字号单位主要有 px、em、rem 三种,区别在于参照物。

单位 参照物 特点
px 屏幕像素 固定不变,最直观
em 父元素的 font-size 层层嵌套会累积,容易算乱
rem 根元素 html 的 font-size 全局统一,改一处全部跟着变
html {
  font-size: 16px;
}
.box {
  font-size: 1.25em;   /* 父元素 16px 时,这里就是 20px */
}
.box2 {
  font-size: 1.25rem;  /* 始终是根元素 16px 的 1.25 倍,20px */
}

em 的坑在于嵌套,子元素继承的父字号可能已经变过,1em 到底是多大越来越难算。想全局统一缩放,rem 是最优解,比如做移动端适配时改 html 的 font-size,全站字号跟着变。日常开发建议 body 用 16px 起步,正文 14 到 16px,标题适当加大即可。

font-weight 字重

字重指文字的粗细。normal 等于 400,bold 等于 700,这是最常用的两个。lighter 和 bolder 是相对父级加减一档。数值写法支持 100 到 900 共九档。

h1 {
  font-weight: 700;
}
em {
  font-weight: lighter;
}

但要注意,普通中文字体通常只有 400 和 700 两个档位,写 500 或 600,浏览器会取最接近的实际档位,并不会真的多出一档粗细。想用更丰富的字重,只能选择支持多字重的字体。

font-style 斜体

normal 常规,italic 斜体,oblique 倾斜。区别简单说,italic 用的是字体自带的斜体设计,oblique 是程序强行把正体扭个角度。实际项目里写 italic 就够用了。

网络字体

系统字体看腻了,可以用网络字体。以 Google Fonts 为例,先在页面 head 里用 link 引入字体样式表。

<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">

然后在 CSS 里正常用这个字体名。

body {
  font-family: "Roboto", sans-serif;
}

另一种方式是 @font-face,把字体文件放在自己的服务器上,自己声明。

@font-face {
  font-family: "myfont";
  src: url("fonts/myfont.woff2") format("woff2");
}

注意 @font-face 里的 font-family 只是自定义名字,叫什么都可以,关键是 src 指向的字体文件要存在。字体格式优先选 woff2,体积小加载快。中文字体动辄几兆,网络字体建议按需加载,别让整站变慢。

小结

字体这块记住五句话,字体栈最后放通用字体族,中文字体名加引号,rem 适合全局缩放,普通字体字重只有两档,网络字体用 woff2。这些取值大多是属性关键字,相关规则可以回看CSS 属性关键字。下一篇我们聊文字本身的外观,颜色、对齐和行高。

上一篇
CSS 盒模型(下)
下一篇
CSS 文本样式