valign 属性在现代浏览器中已完全失效,因 html5 将其标记为 obsolete,chrome、firefox、edge 90+ 和 safari 均忽略它;实现垂直居中应改用 vertical-align: middle(需作用于 td/th、设 min-height、避免混用 line-height)或 display: flex + align-items: center(须加 min-height 防塌陷)。

valign 属性在现代浏览器中已完全失效,别再靠它实现垂直居中。
为什么 valign="middle" 看起来没反应?
不是你写错了,是浏览器根本无视它。Chrome、Firefox、Edge 90+ 和 Safari 都已彻底忽略 valign —— 它早在 HTML5 就被标记为 obsolete(废弃),W3C 明确不鼓励使用。即使你写了 <td valign="middle">,只要页面里有任何 CSS 影响了行高、对齐或布局(比如 <code>vertical-align、display: flex、甚至全局 td { line-height: 1.5; }),valign 就会立刻退场。
- 常见假象:单行文字“看起来”居中,其实是字体默认行高撑出来的错觉
- 一加图片、一换行、一设 padding,
valign的效果就彻底消失 - ASP.NET Web Forms 中的
HtmlTableCell.VAlign属性只是服务端生成valign字符串,同样受前端渲染规则限制
vertical-align: middle 怎么用才真有效?
这是目前最轻量、兼容性最好的方案,但必须满足三个前提:
- 只作用于
<td> 或 <code><th> 元素本身(不能写在里面的 <code><p></p>或<div> 上) <li>单元格要有“可感知的高度”——要么设 <code>height,要么设min-height,否则内容撑多高它就多高,“居中”无从谈起 - 避免和
line-height混用:如果同时设了line-height: 40px,它会覆盖vertical-align的行为,尤其在多行文本时表现诡异
正确示例:
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
<td style="vertical-align: middle; min-height: 48px; padding: 8px;">✅ 已通过审核</td>
复杂内容必须用 Flex 布局兜底
当单元格里有图标 + 多段文字 + 按钮,或者需要响应式适配时,vertical-align 就力不从心了。它的对齐逻辑基于行框(line box)基线,不是视觉中心。
- 给
<td> 加 <code>display: flex; align-items: center;,就能真正按容器中点对齐所有子元素 - 务必加
min-height(如min-height: 60px),否则 Flex 容器高度塌陷,对齐无效 - IE11 需要
-ms-display: flex;和-ms-align-items: center;,但基础对齐完全可用
简例:
<td style="display: flex; align-items: center; min-height: 60px; padding: 0 12px;"> <span>处理中</span>@@##@@</td>
真正容易被忽略的点是:表格行高由内容决定时,vertical-align: middle 的效果几乎不可见;而 Flex 方案一旦漏掉 min-height,整个单元格就会“缩成一条线”。别依赖视觉猜测,始终显式控制高度或最小高度。










