表格居中应使用css的margin: 0 auto(需设width)、text-align + inline-table或flex布局;单元格内容对齐用text-align而非align属性;vertical-align仅作用于td/th内部内容且需有高度支撑;colgroup仅支持有限样式如text-align。

表格整体居中该用 margin: 0 auto,不是 align="center"
直接给 <table align="center"> 写在标签上,浏览器可能“看起来”居中了,但这是浮动行为(类似 <code>float: left 加自动 margin),不是真正的块级居中,且 HTML5 已废弃该属性。W3C 验证器会报错,Chrome/Firefox 行为不一致,尤其在 flex 或 grid 容器里会失效。
真正可靠的做法只有三种:
<table style="margin: 0 auto;"> —— 最简,但必须设 <code>width(否则auto无效)-
<div style="text-align: center;"><table style="display: inline-table;"></table></div>—— 利用文本对齐机制,适合窄屏响应式 -
<div style="display: flex; justify-content: center;"><table></table></div>—— 推荐,无需固定宽,兼容性好(IE11+ 支持) - 整表统一:
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; }(等宽字体防小数点错位) -
td, th { vertical-align: middle; height: 40px; }(设固定高,确保垂直居中有空间) -
td img { vertical-align: middle; }(图文混排时比默认baseline更稳) - 单元格里有
<div>?<code>vertical-align对它无效——得改用display: flex; align-items: center;colgroup + col 是唯一原生列级样式方案,但能力有限
<colgroup></colgroup>和<col>是 HTML 原生支持列定义的机制,适合批量设置列宽、背景、边框,以及极少数 CSS 属性——其中text-align是被广泛支持的,但vertical-align、font-size等一律不生效。使用要点:
- 必须放在
<table> 开头、<code><thead> 或第一行 <code><tr> 之前 <li> <code><col>顺序严格对应表格列数,多一个少一个都会错位 -
<col style="text-align: right; width: 120px;">合法;<col style="vertical-align: middle;">无效 - 优先级低于内联
style,高于外部 CSS 选择器,适合做“默认列样式”,再用类名微调
真正容易被忽略的是:当表格含动态列(如 JS 插入新列)、或用了
colspan/rowspan,<col>就无法精确匹配——这时候只能退回到:nth-child()或类名方案。 - 必须放在
单元格内容水平对齐只认 text-align,不是 align 属性
align="right" 这类写法在 <td> 或 <code><tr> 上虽能临时生效,但属于 HTML5 废弃属性。它和 CSS 的 <code>text-align 优先级冲突,不同浏览器解析顺序不同:Firefox 可能忽略,Chrome 可能覆盖内联 style,调试时难以复现。
正确做法分场景:
注意:text-align 对 <div>、<code><img> 默认无效——除非它们是行内元素或显式设了 display: inline-block。
vertical-align 只作用于 td/th 内部内容,且依赖单元格高度
valign="middle" 是旧写法,值写成 "center" 会完全失效(正确值只有 top、middle、bottom、baseline),且不能用于 <table> 标签——加了也白加。
<p>现代写法是 <code>vertical-align: middle,但它只控制单元格**内部内容**在单元格高度范围内的位置。如果单元格没撑开高度(比如只有一行文字、没设 height 或 min-height),middle 就看不出效果。
常见有效组合:











