如何在 CSS 中设置字体大小
font-size 属性设置文字的大小。把它加在任意元素上,元素内部的所有文字都会继承这个大小,除非某个子元素设置了自己的大小。
要在 HTML 中修改字体大小,用的仍然是 CSS。添加一个 style 属性(<p style="font-size: 20px;">),或者在样式表里写一条规则。上世纪 90 年代的 <font size="5"> 标签已经废弃,在现代网页中没有它的位置。
font-size 支持的单位
| 值 | 示例 | 相对于什么 |
|---|---|---|
px | 16px | 不相对于任何东西:固定大小 |
rem | 1.25rem | 根元素 <html> 的字体大小(默认 16px) |
em | 1.2em | 父元素的字体大小 |
% | 120% | 父元素的字体大小,与 em 相同(120% 就是 1.2em) |
| 关键字 | large | 以默认值 medium 为中心的一套预设字号 |
| 相对关键字 | smaller、larger | 比父元素大一级或小一级 |
| 视口单位 | 4vw | 视口宽度(它的 4%) |
| 函数 | clamp(1rem, 4vw, 2rem) | 在最小值和最大值之间流式变化 |
输入一个值,看看浏览器计算出的大小:
试试 20px、2em、150%、x-large、smaller 和 5vw。无效的值(比如 big)会被忽略,文字保持上一个有效的大小。
rem 与 em:容易踩坑的区别
rem 始终参照根元素,所以 1.2rem 无论出现在哪里大小都一样。em 参照父元素,所以元素嵌套时大小会相乘:
最内层的 em 方块是 16 × 1.2 × 1.2 × 1.2 = 27.648px,最内层的 rem 方块仍然是 19.2px。这种叠加对于各部分需要一起缩放的组件很有用,在其他地方则常常让人意外。单位一页对比了所有长度单位。
关键字:从 xx-small 到 xx-large
绝对关键字对应一套以 medium 为中心的固定字号,medium 等于用户的默认字号(如果没改过就是 16px):
在默认 16px 下,small 是 13px,large 是 18px,x-large 是 24px,xx-large 是 32px。关键字适合快速使用,但设计系统通常会用 rem 定义自己的一套字号。
用 clamp() 实现流式字体大小
想让标题随屏幕变大,但又不能太小或太大,只需一个 clamp() 调用:最小值、一个可缩放的理想值,以及最大值。
在 800px 宽的预览中,5vw 是 40px,介于 24px 和 48px 之间,所以取这个值。clamp 一页会深入讲解流式字体。
给整个页面设置基准字号
在 body(或 html)上设置一次字号,其余所有大小都相对于它来设置:
html { font-size: 100%; } /* respects the user's setting, usually 16px */
body { font-size: 1rem; }
h1 { font-size: 2.25rem; }
small, .caption { font-size: 0.875rem; }
除非页面上的每个大小都用 rem 设置,否则不要用 html { font-size: 62.5%; } 这类技巧;也绝不要在 html 上设置固定的 px 字号:它会覆盖读者在浏览器里选择的字号,而有些人要靠这个设置才能看清文字。
无障碍注意事项
- 屏幕阅读时,正文字号至少 16px 是一个不错的下限。
- 用
rem和em设置的大小会跟随用户的默认字号设置;用px设置的大小会跟随页面缩放,但不跟随这个设置。 - 在 iPhone 上,当你聚焦一个字号小于 16px 的输入框时,Safari 会放大页面。给表单字段设置
font-size: 1rem或更大即可避免。
常见错误
- 使用
<font>标签。 它已经废弃,请用font-size属性。 - 嵌套的
em字号越变越大或越变越小,失去控制。 除非你需要叠加效果,否则用rem。 - 在
html上设置固定的px字号。 它会覆盖读者自己的字号设置。 - 忘了标题本来就有大小。
<h1>默认是2em,所以如果想让它和正文一样大,就需要h1 { font-size: 1em; }。 - 只用视口单位。
font-size: 3vw在手机上小得看不清,在宽屏显示器上又大得夸张。把它包进clamp()里。
常见问题
CSS 中怎么修改字体大小?
在元素上设置 font-size 属性:p { font-size: 18px; }。它接受长度(px、rem、em)、百分比以及 large 这样的关键字。
HTML 中怎么修改字体大小?
用 CSS,写在样式表里或 style 属性里:<p style="font-size: 20px;">。旧的 <font size="5"> 标签在 HTML5 中已经废弃,不应再使用。
浏览器默认的字体大小是多少?
正文默认 16px,除非用户在浏览器设置里改过。默认情况下,1rem 和关键字 medium 都等于这个值。
字体大小该用 px、em 还是 rem?
大多数文字用 rem:它会跟随用户在浏览器里设置的字号,而且不会叠加。当某个大小需要跟随父元素时用 em,比如按钮里的图标。px 不会跟随读者在浏览器中设置的默认字号,所以正文要避免使用。
为什么我用 em 设置的字体越来越大?
因为 em 相对于父元素的字体大小,嵌套的元素会层层相乘:1.2em 里面再套 1.2em,就是基准大小的 1.44 倍。改用 rem,它始终相对于根元素。