body字体设置对table有时不起作用,因浏览器ua样式为td显式声明font-family、th加粗干扰继承,且table相关元素继承链易中断;最稳方案是直接给table或th、td设字体。

直接给 设置字体,对表格内容有效,但存在覆盖不全、继承失效、特殊元素忽略等隐性问题,不能当作“全局生效”的可靠方案。
为什么body字体设置对table有时不起作用?
浏览器对 table、th、td 元素有默认的用户代理样式(user agent stylesheet),其中部分浏览器(如旧版 Safari、某些 Android WebView)会为 td 显式声明 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, ...,从而覆盖 body 的继承值;th 默认加粗且可能带独立 font-weight,也会干扰 font-family 继承。
-
th和td是“可替换元素”在渲染行为上更独立,继承链容易中断 - 使用
border-collapse: collapse后,某些 UA 样式会重置内部文本渲染上下文 - 如果表格内嵌了
<span></span>、<div> 或表单控件(如 <code><input>),它们完全不继承body字体table元素上直接写 CSS 才真正可控最简、最稳的方式是把字体规则落在
table选择器本身,或其子元素上。这样绕过继承不确定性,也避免污染全局。- 用
table { font-family: "Microsoft YaHei", sans-serif; font-size: 14px; }—— 影响整个表格容器及默认继承路径 - 补一句
th, td { font-weight: normal; }—— 防止th因加粗导致字体回退(某些字体无 bold 变体时会 fallback) - 若需兼容 IE8+,避免用
rem作font-size单位,改用px或em
用 class 精准控制比通配符更安全
全局用
* { font-family: ... }看似一劳永逸,但会强制影响<textarea></textarea>、<select></select>、<button></button>等表单控件字体,导致 macOS/Linux 下显示异常(如系统等宽字体被覆盖)。- 推荐定义一个语义 class,比如
data-table:table.data-table, table.data-table th, table.data-table td { font-family: "PingFang SC", "Helvetica Neue", Arial, sans-serif; } - HTML 中写:
<table class="data-table"> —— 隔离作用域,便于后期维护和主题切换<li>如果项目用 CSS-in-JS 或 Shadow DOM,必须把字体声明写进 scoped style 块里,否则 host 样式无法穿透</li> <p>真正要“全局统一”,不是靠 <code>body一刀切,而是明确哪些表格需要统一、哪些需要差异化,然后用选择器精度和 specificity 控制优先级——字体这种基础样式,宁可多写一行 selector,也不要赌继承。
- 用











