应将font-family设在html或body上并配多字体fallback栈,如html{font-family:-apple-system,"segoe ui","pingfang sc","microsoft yahei",sans-serif;},同时显式重置input、button等表单元素为inherit,并统一设置rem基准与无单位line-height。

直接在 body 上设一套安全、可继承、带 fallback 的字体栈,再配合 font-size 和 line-height 基准值,就能覆盖 90% 的模板字体统一需求。别碰 <font></font> 标签,也别给每个 <p></p> 单独写内联样式。
怎么写一个真正跨平台兼容的 font-family 栈
中英文混排时最常踩的坑是字体顺序错乱,导致英文被“中文化”——比如字母细得像铅笔画,x-height 不一致,阅读吃力。
- 正确顺序必须是:先列高质量英文字体(
-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto),再挂中文字体 fallback("Noto Sans CJK SC","PingFang SC","Microsoft YaHei"),最后补sans-serif - Windows 下如果把
"Microsoft YaHei"放在Roboto前面,浏览器会跳过 Roboto 的英文渲染,直接用微软雅黑里的西文子集——它字重轻、字形窄,和中文不协调 - 避免用
font-family: "Helvetica Neue", sans-serif这类纯西文栈,中文用户看到的是系统默认等宽/衬线 fallback,行高塌陷、标点错位 - 如果用了自定义字体(如 Google Fonts),务必加
font-display: swap,否则首屏文字会长时间空白
为什么 font-size 用 rem、line-height 用无单位数值
用 px 写死字号会导致响应式失效;用带单位的 line-height(比如 24px)会让子元素继承绝对值,破坏垂直节奏。
- 在
html元素上设font-size: 16px(或100%),所有rem都有稳定基准 -
body { font-size: 1rem; line-height: 1.6; }—— 这个1.6是乘数,子元素继承后会按自身字号重新计算行高,不会“粘连” - 中文正文建议从
16px(即1rem)起步,小屏可 media query 降到0.9375rem(15px),别低于 14px - 慎用
clamp()做正文字号:虽然流体,但中文字体在小尺寸下笔画易糊,clamp(1rem, 2.5vw, 1.125rem)比全区间缩放更稳妥
哪些地方最容易漏掉字体控制
很多人只设了 body,结果表单控件、代码块、引用块、按钮文字全跑偏——它们默认样式没继承你写的字体栈。
-
input,textarea,select必须显式重置:font-family: inherit; font-size: 1rem;,否则 Chrome/Firefox 会用自己的系统字体(比如 macOS 的Lucida Grande) -
code,pre默认是等宽字体,若要统一风格,得单独设:font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace; -
blockquote,figcaption,small等语义标签默认字号偏小,需确认是否继承了1rem,必要时加font-size: 0.875rem; - 第三方组件(如日期选择器、富文本编辑器弹窗)常自带样式,要用
!important或更高优先级选择器覆盖,否则字体突然“跳变”
最麻烦的不是写错,而是写了但没测——iOS Safari 对 font-optical-sizing: auto 支持不稳定,某些中文字体在 13px 下 baseline 会偏移,这些都得真机+不同系统版本验证,不能只看 Chrome DevTools 模拟器。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











