CSS项目实战之文章排版系统_字体、行间距与段落优化

字体和行距需分层 fallback、用无单位 line-height、段落间距用 margin-bottom、font-feature-settings 要先验证支持。中文字体优先 system-ui 等跨平台栈,禁用 simsun 前置,慎用 normal 和混用引号。

CSS项目实战之文章排版系统_字体、行间距与段落优化

font-family 设置要分层 fallback,别只写“微软雅黑”

Windows 和 macOS 渲染中文字体的默认行为差异大,单写 "Microsoft YaHei" 在 Mac 上会回退到不一致的系统字体,甚至触发 Times New Roman 这种灾难性 fallback。

实操建议:

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

  • 中文优先用 system-ui + -apple-system + BlinkMacSystemFont + "Segoe UI" + "Microsoft YaHei" + ui-sans-serif 这套组合,让各平台走各自最优字体栈
  • 避免在 font-family 里混用引号类型(比如 'PingFang SC', "Helvetica"),统一用双引号更稳妥
  • 不要把 SimSun 放在靠前位置——它像素感重、字重僵硬,现代排版中仅作最后兜底

line-height 别设成无单位数字以外的值

line-height: 24pxline-height: 1.5em 看似直观,但会导致子元素继承时计算混乱。比如字号放大后,固定像素值不会缩放,em 值又会层层叠加。

实操建议:

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

  • 一律用无单位数值(如 line-height: 1.6),它基于当前元素的 font-size 计算,可继承、可缩放、无歧义
  • 正文段落推荐 1.5–1.7,小字号标题可略低(1.3–1.4),大标题可更高(1.8)以留白呼吸感
  • 慎用 normal——浏览器渲染差异大,Chrome 和 Safari 对同一字体可能给出不同行高

段落间距用 margin-top 还是 margin-bottom?

margin-topp 加间距,遇到浮动、flex 或 grid 容器时容易塌陷或错位;而 margin-bottom 更符合文档流自然延展逻辑,也方便后续加 :last-child 清除末尾多余空白。

实操建议:

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

  • 统一用 margin-bottom 控制段落间距,例如 p { margin-bottom: 1.2em; }
  • 配合 p:last-child { margin-bottom: 0; } 避免容器底部多出一截空白
  • 如果内容来自 CMS,且段落间可能夹杂 blockquotefigure,建议改用 margin-block-end(现代浏览器支持良好),它比 margin-bottom 更语义化,且不受书写模式影响

font-feature-settings 开启连字和旧式数字前先确认字体支持

不是所有中文字体支持 font-feature-settings,盲目开启 "liga""onum" 可能完全无效,甚至在某些字体中引发字符错位。

实操建议:

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

  • 先查字体文档或用浏览器 DevTools 的 Fonts 面板确认是否暴露对应 OpenType 特性
  • 中文字体极少支持 "liga"(连字),但部分思源黑体变体、霞鹜文楷等开源字体支持 "ss01""ss02" 等样式集,可针对性启用
  • 若需旧式数字(lowercase numbers),优先考虑用 font-variant-numeric: oldstyle-nums;,比手动写 font-feature-settings: "onum" 更可靠、更易维护

字体和行距看着简单,但跨平台渲染、继承链、字体特性支持这几块最容易在上线后才暴露问题。尤其当设计稿用的是 macOS 字体预览,而用户大量在 Windows 浏览时,font-family fallback 顺序和 line-height 单位选错,三分钟就能让整篇阅读体验掉档。