Menu

CSS 行高 line-height:无单位值、px、em 与示例

line-height 设置每行文字的高度,也就决定了行与行之间的距离。本文讲解为什么无单位的数字是正确的默认选择,px、em 和 % 值在继承上有何不同,以及正文和标题的合适取值。

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

line-height 的作用

line-height 设置每行文字的高度。这个高度与字体本身所需高度之间的差值会被一分为二,分别加在字母的上方和下方,所以它就是控制行间距的方法。

三个段落都使用 16px 的字体。各行的高度分别是 16px、24px 和 32px。

取值:无单位、长度、百分比、normal

值示例16px 文字的行高子元素继承到的是
数字1.524px数字本身(1.5),每个元素重新计算
长度24px、1.5em、1.5rem24px计算后的长度(24px)
百分比150%24px计算后的长度(24px)
normalnormal由字体决定,通常约为 1.2normal

前两行在单个元素上看起来一样。只有当子元素的字号不同时才会显出区别,这就是下一节的内容。

为什么无单位是正确的默认选择

1.5em 或 150% 的行高会在父元素上被换算成像素,子元素继承的就是这些像素。字号更大的子元素于是会得到比字母还矮的行。无单位的 1.5 则以数字本身被继承,再乘以每个子元素自己的字号。

两个标题都换成了两行。第一个继承了 21px 的行高,而字母是 32px,所以各行互相重叠。第二个得到 32 × 1.5 = 48px 的行高。在 body 上用数字设置一次 line-height,大多数页面就再也不用管它了。

自己试试不同的值

试试 1、2、30px、200% 和 normal。Chrome 对 normal 报告的是这个词本身而不是像素值,因为它的大小来自字体。

易读文字的合适取值

  • 正文: 1.4 到 1.6。行越长,需要的行高越大,眼睛才能找到下一行的开头。
  • 标题: 1.1 到 1.3。大字号配 1.5 的行距,看起来就像几行分开的文字,而不是一个标题。
  • 按钮和单行标签: 1 到 1.25,高度用内边距来撑。

在无障碍方面,WCAG 成功标准 1.4.12 要求读者把行高设为字号的 1.5 倍时页面仍能正常使用,所以不要给文本框设置会把文字裁掉的固定高度。

让单行文字垂直居中

当一个盒子里恰好只有一行文字时,让 line-height 等于盒子高度,文字就会位于垂直方向的正中,因为多余的空间被平均分到了上下两侧:

一旦文字换成两行,这个方法就失效了,因为每行都有 40px 高。对于可能换行的内容,请改用 flexbox 居中,见 让 div 居中 一页。

font 简写属性

font 简写属性用斜杠同时设置字号和行高:

body {
  font: 16px/1.5 system-ui, sans-serif; /* size 16px, line-height 1.5 */
}

简写属性会重置所有它没有提到的字体属性(如果省略斜杠部分,line-height 也会被重置为 normal),所以要把它写在任何单独的 font-* 规则之前。

常见错误

  • 在容器上使用 em 或 %。 子元素会继承一个固定长度。请使用无单位的数字。
  • 给文本框设置固定的 height。 文字换行或读者加大间距时,内容就会溢出。让内容决定高度。
  • 正文行距太紧。 line-height: 1 会让段落难以阅读。从 1.5 开始。
  • 以为 line-height 能增加段落之间的距离。 那是段落上的 margin 的工作。
  • 依赖 normal。 它因字体而异,所以换字体时布局会发生变化。

常见问题

CSS 中的 line-height 有什么作用?

它设置每个文字行框的高度。超出字体本身高度的多余空间会平均分到字母的上方和下方,所以 line-height 越大,行与行之间的距离就越大。

line-height 应该带单位吗?

通常不应该。像 1.5 这样的无单位值会乘以每个元素自己的字体大小,所以在字号不同的子元素中也能保持比例。带单位的值只计算一次,然后作为固定长度被继承。

正文用多大的 line-height 合适?

段落在 1.4 到 1.6 之间,大标题在 1.1 到 1.3 左右。WCAG 的 AAA 级指南要求段落行高至少为 1.5。

line-height: normal 是什么?

这是默认值。浏览器使用字体自身度量信息中的一个值,通常在 1.2 左右,但每种字体都不同,所以在不同字体之间无法预测。

HTML 中怎么修改行间距?

HTML 没有设置行间距的属性。请使用 CSS 属性,比如用 <p style="line-height: 2;"> 设置双倍行距。

Coddy 编程语言插图

和 Coddy 一起学编程

开始