css字间距与行间距_word-spacing与line-height调整

10次阅读

word-spacing仅对英文单词间空格生效,中文因无词边界而无效;中文需用letter-spacing控制字间距;line-height无单位值为font-size乘数,推荐全局使用;vertical-align与line-height共同影响行内元素垂直对齐。

css字间距与行间距_word-spacing与line-height调整

word-spacing 只影响英文单词间空格,对中文无效

word-spacing 的作用对象是「单词之间的空白」,浏览器按 Unicode 词边界(如空格、连字符、标点)切分文本后,在相邻单词之间插入额外间距。中文没有单词分隔符,整段文字被当作一个“词”,所以设置 word-spacing: 20px 对纯中文段落毫无反应。

常见误用场景:

  • 想让中文标题字与字之间拉开距离,却写了 word-spacing
  • 中英文混排时只调 word-spacing,结果英文单词撑开、中文不动,视觉错乱

正确做法:中文需用 letter-spacing;中英文混排建议统一用 letter-spacing 或结合 word-spacing 微调英文部分。

line-height 不是行高像素值,而是行距计算比例

line-height 设为无单位数值(如 1.6)时,它是一个乘数,作用于当前元素的 font-size,最终行高 = font-size × line-height。设为带单位值(如 24px)则直接生效,但会破坏继承逻辑——子元素若未重设 line-height,将沿用这个固定像素值,可能在缩放或换字体时导致行距塌陷或溢出。

立即学习前端免费学习笔记(深入)”;

推荐写法:

  • 全局基础行高用无单位值:line-height: 1.5
  • 需要精确控制某段文字(如按钮内文)可用 line-height: 24px,但务必同步确认子元素是否需重置
  • 避免写 line-height: 0 来“消除行距”——这会让多行文本上下重叠,line-height: 1 才是紧凑但可读的下限

letter-spacing 是中文“字间距”的唯一可靠方案

要控制中文字符、数字、标点之间的间距,必须用 letter-spacing。它对每个字符(包括汉字、英文字母、数字)之后插入指定间距,不区分语言。

注意细节:

  • 负值会让字紧贴甚至重叠:letter-spacing: -1px 可用于微调标题紧凑感,但别超过 -2px,否则可读性下降
  • 响应式中慎用固定像素值,优先用 emrem 单位,例如 letter-spacing: 0.05em 随字号等比缩放
  • 不要在长段落正文里设 letter-spacing,易造成阅读疲劳;仅用于标题、标签、短文本
h1 {   font-size: 2rem;   letter-spacing: 0.08em; /* 字间距随字号自适应 */ } 

.tag { font-size: 0.875rem; letter-spacing: 1px; / 小字号下用 px 更稳 / }

line-height 和 vertical-align 共同决定行内元素垂直对齐

当行内有图片、图标或 inline-block 元素时,line-height 不仅控制文本行高,还参与该行的“行框(line box)”高度计算。而 vertical-align 决定这些元素在行框内的对齐基准线。

典型问题:

  • 图标和文字看起来“偏高”或“下沉”,其实是 vertical-align 默认为 baseline,而图标底边常低于文字基线
  • 设了 line-height: 2 后,图标仍不对齐,是因为没同步调整 vertical-align

解决方式:

  • 统一设 vertical-align: middlevertical-align: -0.125em(更精准匹配字体度量)
  • 避免给行内元素单独设 heightline-height,干扰整体行框计算
  • 调试时可在开发者工具中勾选「Show layout shifts」观察行框实际范围

真正难的是在响应式设计里兼顾不同字号下的 letter-spacingline-height 行为——它们不是独立变量,而是和 font-size、字体度量、甚至系统渲染引擎强耦合的。一次调好,不等于所有设备都一致。

text=ZqhQzanResources