line-height未生效的根本原因是其作用对象为行框而非文字本身,单行文本时浏览器会压缩行框高度;推荐使用无单位数值(如1.5),避免固定像素值导致响应式问题。
常见现象是写了 line-height: 20px 或 line-height: 1.5,但段落行距看起来没变化。根本原因在于:行高作用对象是**行框(line box)**,不是文字本身;如果块级元素里只有一行文本、且没有换行或 ,浏览器会把行框高度“压缩”到刚好容纳内容,视觉上就看不出效果。
实操建议:
文本足够长、自然换行,或手动插入
制造多行border 或 background-color,方便观察行框实际高度)单独设 line-height,它不会影响父行框——要调整个体行距,得设在父块级元素(如 、)上用无单位数值 vs px/em/% 的区别
line-height 接受多种值类型,行为差异很大:
-
line-height: 1.5(无单位):最推荐。它是相对于当前元素 font-size 的倍数,会继承并参与子元素计算,响应式友好
-
line-height: 24px(固定像素):强制行高为 24px,不随字体大小缩放,移动端易出问题
-
line-height: 150%:和 1.5 看似一样,但它是**继承计算后的绝对值**——父设 line-height: 150%,子元素若改了 font-size,行高不会按新字号重新算,容易断层
body {
font-size: 16px;
line-height: 1.5; /* ✅ 推荐:子元素 font-size 变成 20px,行高自动变成 30px */
}
h1 {
font-size: 20px;
/* 行高 = 20px × 1.5 = 30px */
}段落首行缩进 + 行距同时设置的坑
中文排版常要 text-indent: 2em + 调整行距,但容易误用 padding-top 或 margin-top 代替 line-height,导致首行缩进失效或上下间距不均。
正确做法:
- 首行缩进只用
text-indent,别碰 margin/padding
- 行距统一用
line-height 控制,它不影响缩进逻辑
- 如果发现首行缩进“被吃掉”,检查是否父容器有
overflow: hidden 或字体渲染异常(比如用了非标准中文字体且未声明 font-family)
p {
font-size: 16px;
line-height: 1.75; /* 行距宽松些,适合中文阅读 */
text-indent: 2em; /* 首行缩进两个汉字宽度 */
margin: 0; /* 清除默认段落外边距,避免叠加 */
}flex 容器里 line-height 失效怎么办
当 放在 display: flex 的父容器中,有时 line-height 看似无效,其实是 flex 项默认 align-items: stretch 拉伸了高度,掩盖了行高效果。
解决方法:
- 给 flex 子项(即段落)加
align-self: flex-start
- 或直接在 flex 容器上设
align-items: flex-start
- 更稳妥的是:确认段落是否被设了
height 或 min-height ——这些会压制 line-height 的自然扩张
真正容易被忽略的点是:line-height 不是“行与行之间的空白”,而是**整行内容所占的最小高度**。它既撑开上下行文字距离,也决定单行文本的垂直居中基准线。调得太小会挤字,太大又浪费空间,中文建议值在 1.6–1.8 之间比较安全。