推荐用无单位数值(如line-height: 1.5)而非line-height: 24px,因其作为字体大小倍数动态缩放,避免响应式或嵌套字号变化时行距失控、文字重叠或截断。

line-height 用无单位数值(如 1.5)设置比例是最可靠的方式;其他值类型在嵌套、响应式或字体变化时容易出错。
为什么推荐用 line-height: 1.5 而不是 line-height: 24px
固定像素值会锁死行高,脱离字体大小的动态关系:
- 当子元素
font-size变为12px,line-height: 24px会让文字上下留白过多,视觉松散 - 当子元素
font-size变为20px,同一24px行高可能压住字母“g”“y”的下降部,造成截断 - 用户放大系统字体或启用强制缩放时,
px值不随字体变化,行距反而变紧甚至重叠 - 响应式中用
rem或clamp()动态调字号时,px行高完全失联
line-height: 1.5 和 line-height: 150% 看似一样,但继承逻辑不同
两者计算结果常相同,但传播方式有本质区别:
-
line-height: 1.5是纯缩放因子,子元素继承该数字,再结合自身font-size重新计算 → 安全、可预测 -
line-height: 150%是“父元素当前font-size× 1.5”所得的绝对像素值,该像素值被子元素直接继承 → 子元素不会再次乘自己字号,易导致小字号文字行距过大、大字号文字行距过小 - 若父元素
font-size由calc(1rem + 0.25vw)动态生成,150%可能在计算早期就固化一个中间值,而1.5始终保持实时绑定
给 inline 元素设 line-height 为什么没反应
不是没生效,是它作用的对象不是你想象的那样:
-
line-height控制的是**行框(line box)高度**,不是单个span的上下边距 - 给
span设line-height: 2,若其父p已撑开足够高的行框,span只是按vertical-align: baseline对齐其中,视觉上“不动” - 真正影响内联元素垂直位置的是
vertical-align:想和文字居中对齐,用vertical-align: middle;想让图标底部贴齐文字基线,用vertical-align: text-bottom -
input、img等替换元素不受line-height直接“撑高”,它只参与所在行框的布局分配
做多行省略(-webkit-line-clamp)时,line-height 必须精确匹配
最后一行被切半或省略号悬空,90% 是因为这三个值没对齐:
-
line-height必须是纯数字或统一单位(推荐1.6或1.6em) -
max-height必须严格等于line-height × 行数,且单位一致:例如line-height: 1.6em+max-height: 4.8em(3 行) - 若混用单位(如
line-height: 1.6em但max-height: 48px),浏览器计算偏差会导致截断错位 -
display: -webkit-box和-webkit-box-orient: vertical缺一不可,否则line-clamp不触发
最易被忽略的一点:全局 body { line-height: 1.6 } 是起点,但所有标题、引用块、代码行等特殊语义元素都必须显式覆盖——靠继承默认值,在复杂排版中大概率失效。











