不能用了,valign是html4废弃属性,html5已完全移除;应改用css的vertical-align(单行文本)或flex布局(复杂内容),因其违反语义化、不响应式且w3c验证报错。

TD 标签里 valign 属性还能用吗?
不能用了,valign 是 HTML4 的废弃属性,在 HTML5 中已完全移除。浏览器虽然多数还兼容(比如 valign="middle" 可能仍生效),但 W3C 不再验证,且在严格模式或某些现代框架渲染中会失效。别再依赖它。
CSS 的 vertical-align 为什么对 TD 没反应?
vertical-align 在 <td> 上默认只影响单元格内「行内内容」的基线对齐,不是整块内容上下居中——尤其当单元格里只有纯文本、没有 <code><span></span> 或其他行内元素包裹时,表现容易误判。更关键的是:这个属性对 <td> 本身只控制其在「行内盒」中的对齐位置,不是相对于单元格高度的垂直居中。
<ul><li>想让文字在单元格内上下居中,真正起效的是给 <code><td> 设置 <code>display: table-cell(它本来就是)+ vertical-align: middle
<tr> 高度可计算(比如设置了 <code>height,或内容撑开),否则 vertical-align 无参照基准
<td> 里有 <code><div> 且设了 <code>height,而文字仍偏上,大概率是 <div> 默认 <code>display: block,此时 vertical-align 对它无效——得改用 Flex 布局
推荐方案:用 Flex 实现可靠垂直居中
对单个 <td> 内容做垂直(+水平)居中,最稳的方式是把它变成 Flex 容器:
<pre class="brush:php;toolbar:false;"><td style="display: flex; align-items: center; justify-content: center;">
这段文字会真正居中
</td></pre>
<ul>
<li>
<code>align-items: center 管垂直居中,justify-content: center 管水平居中
<td> 高度,Flex 会自动按内容或表格行高处理
<li>兼容性好:Chrome 21+、Firefox 20+、Edge 12+、Safari 6.1+ 都支持;IE10+ 需加 <code>-ms- 前缀(如需支持 IE,建议用 display: -ms-flexbox)<td> 里嵌套了多个块级元素(比如多个 <code><p></p>),它们会并排显示——加 flex-direction: column 可恢复竖排
表格整体垂直对齐的常见误操作
有人会给整个 <table> 加 <code>style="vertical-align: middle",这毫无作用——vertical-align 不适用于 <table> 元素。还有人试图在 <code><tr> 上设 <code>vertical-align,同样无效,因为 <tr> 不是 <code>table-cell。
- 真要控制整行单元格内容对齐,统一在
<td> 或 <code><th> 上设 CSS(如 <code>vertical-align: top) - 若需某列全部居中,用类选择器更高效:
<td class="col-center"> + <code>.col-center { display: flex; align-items: center; } - 响应式表格中,Flex 方案比
line-height拉伸更健壮——后者在多行文本或换行时直接失效
Flex 方案看着简单,但容易忽略
<td> 默认是 <code>table-cell,强行加 display: flex 会破坏表格语义渲染逻辑(比如自动等宽、跨列行为)。如果表格结构复杂或需无障碍支持,优先用原生 vertical-align + 显式 height 控制;仅当内容动态、多行、或样式强依赖居中时,再切到 Flex。











