valign属性已废弃,应使用CSS vertical-align或Flexbox实现垂直居中;vertical-align仅对内联级元素或table-cell生效,失效常见于无明确高度、块级包裹或图片设为block;Flexbox更可控但需IE10+支持。

valign 属性在现代 HTML 中已废弃,直接写在 <td> 或 <tr> 上不会被规范解析,也不该出现在新项目中。真正起效的是 CSS 的 vertical-align,但它只对表格单元格(display: table-cell)或内联级元素生效 —— 图片默认是内联元素,所以关键不在“加不加”,而在“加给谁、怎么加”。
为什么 vertical-align: middle 在 <td> 里有时没反应?
常见失效原因有三个:
-
<td>没设明确高度,或内容撑高了单元格,导致“居中”视觉上不明显 - 图片被包裹在
<p>、<div>等块级容器里,vertical-align对块级子元素无效 - 图片本身设置了
display: block,脱离了内联上下文,vertical-align失效
<td> 直接设 vertical-align: middle 的前提条件
这个方案最轻量,但必须满足:
- 图片保持默认
display: inline或显式设为display: inline-block -
<td>高度由 CSS 控制(比如height: 80px或min-height: 80px),不能靠内容撑开 - 避免在
<td>内嵌套<div>或其他块级容器包裹图片
示例有效写法:
<td style="vertical-align: middle; height: 60px;"><img src="icon.png" style="vertical-align: middle;"></td>
立即学习“前端免费学习笔记(深入)”;
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
Flexbox 方案:更可控,适合复杂单元格
当单元格里不止一张图、还有文字或按钮时,vertical-align 很难兼顾。此时把 <td> 变成 Flex 容器是最稳妥的选择:
- 给
<td>加display: flex和align-items: center - 若还需水平居中,补上
justify-content: center - 图片无需额外样式,
display: block也完全不影响
注意:IE10+ 支持,如需兼容 IE9 及更早版本,此方案不可用。
容易被忽略的响应式陷阱
固定 height 在小屏下会裁剪图片,而只靠 padding 模拟高度又会让 vertical-align 失效。真正健壮的做法是:
- 用
min-height替代height - 配合
max-width: 100%和height: auto控制图片缩放 - 在窄屏媒体查询中改用
flex布局,避免依赖单元格高度计算
垂直居中的本质不是“让图片动”,而是“控制它所在的对齐上下文”。选错上下文,再多次 vertical-align: middle 也没用。


















