valign 属性在现代 html 中基本失效,因其自 html5 起已被完全废弃,不参与 css 盒模型计算,且在严格模式下无规范保证;应改用 vertical-align 或 flex 布局实现垂直对齐。

valign 属性为什么在现代 HTML 中基本失效
valign 是 HTML 4 中用于 <td>、<code><th> 和 <code><tr> 的属性,但自 HTML5 起已被**完全废弃**。浏览器虽仍部分支持(如 <code>valign="middle" 在某些旧渲染模式下看似有效),但它不参与 CSS 盒模型计算,也不响应 flex/grid 布局,且在严格模式()下无规范保证行为。实际项目中依赖它,等于把对齐逻辑交给不可控的兼容性补丁。
<h3>用 CSS vertical-align 实现单元格内容垂直居中</h3>
<p><code>vertical-align 是替代 valign 的标准方式,但它只对**行内元素、表格单元格和 table-cell 类 display 元素生效**——这点常被误用。在 <td> 上直接设置是安全且推荐的。
<ul>
<li>
<code>vertical-align: middle:让内容在单元格内垂直居中(最常用)
vertical-align: top 或 vertical-align: bottom:对齐到顶部/底部<div> 或 <code><p></p> 等块级元素设 vertical-align,除非其 display 显式设为 inline 或 table-cell
vertical-align 控制它们彼此间的基线关系;单个块级子元素时,它控制该块相对于单元格的对齐位置<td style="vertical-align: middle;">这行文字会垂直居中</td>
当 vertical-align 不生效时的常见原因
不是属性写错了,而是上下文不满足触发条件:
- 父容器不是表格或
display: table-cell——比如你给一个<div> 设了 <code>vertical-align: middle,它不会起作用 - 单元格高度未显式设定,且内容高度小于行高,导致“居中”视觉上不明显(可加
height或line-height辅助调试) - 内容本身是弹性布局容器(如
display: flex子元素),此时vertical-align被忽略,应改用align-items: center - 设置了
white-space: nowrap且文本过长溢出,可能掩盖对齐效果 - flex 方案对嵌套复杂内容(如按钮、图标、多段文字)更鲁棒,且兼容所有现代浏览器
- 避免在
<td> 上直接设 <code>display: flex——这会破坏表格的渲染逻辑,可能导致列宽计算异常真正麻烦的不是怎么写对齐代码,而是判断当前场景是否真的需要表格语义。如果只是视觉上像表格,用 CSS Grid 或 Flex 配合语义化标签(
<section></section>、<article></article>)往往更干净、更易维护。
更现代的替代方案:flex 布局 + table-cell 模拟
如果表格结构必须保留语义,但需要更可控的对齐(比如跨多行内容、图标+文字混合对齐),建议将 <td> 内部再包一层容器,并用 flex:
<pre class="brush:php;toolbar:false;"><td>
<div style="display: flex; align-items: center; height: 100%;">
<span>居中内容</span>
</div>
</td></pre>
<ul><li>注意:需确保 <code><td> 有明确高度(或继承自 <code><tr>),否则 <code>height: 100% 可能无效











