标签的 face 属性不能设置默认字体,仅对内联文本临时生效且已弃用;真正控制全局默认字体须用 CSS 的 font-family 作用于 html 或 body,并配置多层 fallback 链。

标签的 face 属性**不能可靠更改网页默认字体**,它只对包裹的内联文本生效,且已被所有现代标准弃用。真要改“默认字体”,必须用 CSS 的 font-family 作用于根元素或 body。
为什么 不是默认字体方案
这个属性从来就不是设置“默认字体”的机制,它只是给某一段 HTML 文本临时指定一个字体名,且依赖用户本地是否安装该字体。常见问题包括:
-
中文在 macOS 或 Linux 上基本不生效,因为系统没装这个字体 - 浏览器 UA 样式表中,
input、button、textarea等元素自带font-family,会完全忽略外层 - HTML5 完全移除了
标签,任何新项目用它会导致验证失败和潜在渲染异常
CSS 中真正控制默认字体的写法
全局生效的关键是把 font-family 设在 html 或 body 上,并按平台分组+合理 fallback:
html {
font-family: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB",
"Noto Sans CJK SC", system-ui, -apple-system,
sans-serif;
}
注意几点:
- 中文字体名含空格必须用英文双引号包裹,如
"PingFang SC";英文字体如system-ui可不加,但统一加更稳妥 - 顺序不能乱:
system-ui和-apple-system是现代系统原生无衬线字体,优先级应高于传统字体 - 末尾必须保留通用字体族,比如
sans-serif,否则 fallback 链断裂时可能回退到serif(如 Times New Roman) - 不要写
"SimSun"—— 它在 macOS/Linux 几乎不存在,纯属干扰 fallback 流程
子元素覆盖 body 字体的典型场景
即使你设了 body { font-family: ... },下面这些元素仍可能显示成别的字体:
-
input、textarea:浏览器 UA 样式默认设为font-family: monospace或系统等宽字体 -
code、pre:默认用等宽字体,需显式重置为inherit或同款 sans-serif -
button:某些浏览器对button单独设了font-family: system-ui,但行为不一致
稳妥做法是在重置样式中统一处理:
input, textarea, button, select, code, pre {
font-family: inherit;
}
@font-face 引入自定义字体时的 fallback 注意点
如果你用 @font-face 加载私有字体(比如 "MyCustomFont"),它不会自动成为“默认字体”。必须手动把它放进 font-family 列表最前面:
@font-face {
font-family: "MyCustomFont";
src: url("myfont.woff2") format("woff2");
font-display: swap;
}
html {
font-family: "MyCustomFont", "PingFang SC", sans-serif;
}
关键细节:
-
font-display: swap能避免 FOIT(空白闪动),但首次加载时仍会 fallback 到后面字体,所以列表顺序依然重要 - 不要省略本地字体 fallback —— 自定义字体加载失败或被屏蔽时,用户至少还能看到可用字体
- WOFF2 是首选格式,但若需兼容 IE11,得额外提供 EOT 或 WOFF
真正影响全局字体的是 CSS 的继承链和浏览器 UA 样式表的博弈,不是某个标签属性。最容易被忽略的,是以为设了 body 就万事大吉,结果表单控件和代码块还固执地用着系统默认等宽字体。











