th标签默认加粗居中,须置于thead或tr内确保语义正确;合并单元格时需检查colspan/rowspan避免错位;样式覆盖时应优先重置而非替换标签,保障无障碍与导出功能。

TH 标签默认就加粗且居中,不用额外写 CSS
浏览器对 <th> 的 UA 样式(user agent stylesheet)默认设置了 font-weight: bold 和 text-align: center,所以只要用对标签,效果就自动生效。别去手动加 style="font-weight:bold;text-align:center"——既冗余,又可能被自定义样式意外覆盖。
必须放在 <thead> 或 <tr> 里,否则语义失效
<th> 是“表头单元格”,不是“看起来像标题的普通单元格”。它需要出现在正确的位置才能被屏幕阅读器识别、被 CSS 的 :nth-child() 等选择器合理匹配:
- 推荐放在
<thead><tr>...</tr></thead>内(整行都是表头) - 也可以放在
<tbody><tr>里,但仅当该行是某组数据的局部表头(比如带分组的表格) - 绝对不要单独放在
<table>下面,或套在<div>里——HTML 解析会自动纠错,但语义丢失,无障碍支持失效
rowspan/colspan 用错会导致加粗居中错位
当 <th> 合并行列时,浏览器仍按默认样式渲染,但视觉上容易误判“没居中”——其实是单元格宽度/高度变了,文字仍在自身范围内居中加粗:
- 检查是否漏写了
colspan导致后续单元格错位,让<th>看起来偏左 - 如果用了
rowspan,确保同一列下方没有其他<th>冲突(比如跨行表头下面又写了同列的<td>,可能触发表格重排) - 真要微调对齐,优先用
text-align: left覆盖,而不是删掉<th>改用<td>—— 语义比样式重要
用 CSS 覆盖默认样式时,记得重置 font-weight 和 text-align
项目里全局重置了 th, td { font-weight: normal; text-align: left; }?那 <th> 就真不加粗也不居中了。这时候必须显式恢复:
th {
font-weight: bold;
text-align: center;
}
更稳妥的做法是只重置 td,保留 th 默认行为;或者用类名区分:<th class="plain-header"> 再单独定义,避免影响所有表头。
最常被忽略的是:把 <th> 当成“美化用的加粗居中标签”来滥用,结果导出 Excel 或读屏时完全无法识别表头结构。语义正确了,样式才真正可靠。

















