Menu

CSS 字体大小 font-size:px、rem、em 与关键字

font-size 属性决定文字有多大。本文讲解它支持的单位(px、rem、em、%、关键字、vw),如何在 HTML 中修改字体大小,为什么 rem 是稳妥的默认选择,以及 em 的大小如何层层叠加。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

如何在 CSS 中设置字体大小

font-size 属性设置文字的大小。把它加在任意元素上,元素内部的所有文字都会继承这个大小,除非某个子元素设置了自己的大小。

要在 HTML 中修改字体大小,用的仍然是 CSS。添加一个 style 属性(<p style="font-size: 20px;">),或者在样式表里写一条规则。上世纪 90 年代的 <font size="5"> 标签已经废弃,在现代网页中没有它的位置。

font-size 支持的单位

值示例相对于什么
px16px不相对于任何东西:固定大小
rem1.25rem根元素 <html> 的字体大小(默认 16px)
em1.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,它始终相对于根元素。

Coddy 编程语言插图

和 Coddy 一起学编程

开始