表格居中唯一可靠方式是margin: 0 auto且必须设明确width;单元格水平对齐只用text-align,禁用align属性;垂直对齐用vertical-align: middle等值作用于td/th,禁用valign。

表格整体居中:必须用 margin: 0 auto,且带明确 width
直接写 <table align="center"> 看似能居中,但这是 HTML5 已废弃的写法,W3C 验证器报错,Chrome/Firefox 渲染逻辑不一致,Flex 容器里完全失效。真正可靠的方式只有一种:<code>margin: 0 auto —— 但它有两个硬性前提:
<table> 必须有明确宽度,比如 <code>width: 80%、width: 600px或响应式组合width: 100%; max-width: 800px;;否则margin没基准可算,直接忽略- 确保父容器没设
float、display: inline或overflow: hidden,这些会破坏块级上下文 - 别用
display: flex父容器包裹表格来“居中”——它会让colspan/rowspan渲染异常,打印预览和部分屏幕阅读器也会出问题 - 整表统一:用
td, th { text-align: center; } - 按列控制:用
td:nth-child(2), th:nth-child(2) { text-align: right; }(第二列右对齐,适合金额) - 按语义加类:
<td class="amount">¥12,345.67</td>+.amount { text-align: right; font-family: monospace; }(等宽字体防小数点错位) - 注意:
text-align对<div>、<code><p></p>这类块级子元素无效——除非显式设display: inline-block或用margin: 0 auto单独处理单元格内容垂直对齐:
vertical-align只作用于<td> 和 <code><th> <p><code>valign="middle"是旧写法,且不能加在<table> 或 <code><tr> 上——加了也白加。正确做法是给单元格设 <code>vertical-align: middle,但效果依赖行高支撑:- 必须写在
<td> 或 <code><th> 上,如 <code><td style="vertical-align: middle;"> <li>取值只有 <code>top、middle、bottom、baseline;写成"center"会完全失效 - 如果单元格只有一行文字,且行高由内容撑开,
vertical-align: middle可能“看不出效果”——此时需手动设height或line-height - 含图片时,
vertical-align作用于图片盒模型整体;若图片设了display: block,该属性就失效 -
td:nth-child(1), th:nth-child(1) { text-align: left; }→ 第一列(含表头)左对齐 -
td:nth-child(2) { text-align: right; }→ 第二列数据右对齐 -
td:nth-child(3) { text-align: center; }→ 第三列居中 -
<colgroup></colgroup>可预设列样式,但只支持text-align、width等极少数属性;vertical-align在<col>上无效 - 旧项目迁移时,用正则批量删掉所有
align="..."和valign="...",再补 CSS —— 残留一个都可能引发渲染优先级混乱
多列不同对齐:优先用
:nth-child(n),慎用<colgroup></colgroup>想让第一列左对齐、第二列右对齐、第三列居中,最稳定方式不是靠类名,而是用列序号选择器:
- 必须写在
单元格内容水平对齐:只认 text-align,别碰 align 属性
align="right" 写在 <td> 或 <code><tr> 上,浏览器可能还解析,但属于非法标记。它和 <code>text-align 的优先级冲突不可控:Firefox 可能无视,Chrome 可能覆盖内联样式,调试时复现困难。











