html表格对齐应弃用align和valign属性,改用css的text-align(水平对齐)和vertical-align(垂直对齐),二者须正确作用于td/th等有效元素,否则无效。

text-align 和 vertical-align 不是 HTML 属性,别在标签里写 align="center"
很多人搜“表格 valign”“table align”,其实是被旧式 HTML 标签误导了。align 和 valign 是 HTML4 时代的内联属性,早已被 W3C 废弃,现代浏览器虽仍兼容(如 <td align="center" valign="middle">),但不推荐使用。它们无法响应式生效,不支持 CSS 选择器控制,且与 Flex/Grid 布局冲突。真正可控、可维护的方式只有 CSS 的 <code>text-align 和 vertical-align。
text-align 控制水平对齐,只对 td/th 或块级容器内的行内内容起作用
text-align 的作用对象是“块级元素内部的文本和行内级子元素”。在表格中,它必须写在 td 或 th 上才有效;写在 table 或 tr 上无效(因为 tr 不是块级容器,table 默认 display: table,其子元素不直接受 text-align 影响)。
- 表头文字统一居中:
th { text-align: center; } - 金额列右对齐便于小数点对齐:
td.amount { text-align: right; } - 避免误用:给
table设置text-align: center不会让所有单元格内容居中,除非每个td都继承该样式(但继承不可靠,尤其当td有自身样式时)
vertical-align 控制垂直对齐,但只在 table-cell 或 inline-level 元素上生效
vertical-align 不是“让 div 在页面里垂直居中”的工具,它只在两种上下文中起作用:表格单元格(td/th,默认 display: table-cell)或行内级元素(img、span 加了 display: inline-block 等)。给普通 div 或 tr 设 vertical-align: middle 完全无效。
- 单元格内容垂直居中:
td, th { vertical-align: middle; } -
middle并非“容器高度一半”,而是对齐到 x-height 中间,视觉上接近居中,但受字体、line-height 影响;若需精确居中,配合line-height或改用 Flex - 图文混排时常见问题:
img默认vertical-align: baseline,下方留白;加vertical-align: middle可消除
多行文本在单元格内垂直居中不能只靠 vertical-align
当 td 内是多行段落(比如 p 或换行的文本),vertical-align: middle 依然只作用于整行框(line box)的基线位置,无法让多行内容在单元格高度方向真正居中——这是 vertical-align 的根本限制。
- 可靠解法:把
td设为display: flex,再用justify-content: center+align-items: center - 兼容性妥协方案:设
td { height: 100px; line-height: 100px; }+text-align: center,但仅限单行 - 注意
box-sizing: border-box,否则 padding 会撑高单元格,破坏居中效果











