valign 属性在 html5 中已被废弃,对长文本无效;应使用 css 的 vertical-align 或 flex 布局实现单元格内容垂直居中,并需确保行高足够、清除默认边距、设置最小高度。

valign 属性在现代 HTML 表格中**无法确保长文本单元格对齐美观**——它已被 HTML5 明确废弃,所有主流浏览器(Chrome/Firefox/Edge 90+)完全忽略该属性,哪怕你写 <td valign="middle">,也不会生效。
别白费力气调试 <code>valign,真正起作用的是 CSS。
为什么 valign 对长文本无效且不可靠
长文本单元格(比如多行 <p></p>、换行的 <span></span> 或含图标+文字的组合)会暴露 valign 的本质缺陷:它不是“让内容在单元格里居中”,而是控制整块内容相对于行框基线的位置。一旦内容超出单行,valign="middle" 就失去预期效果,尤其在响应式缩放或字体大小变化时,偏移更明显。
vertical-align: middle 在 <td> 上能用,但有前提
<p>给 <code><td> 设置 <code>vertical-align: middle 是标准做法,但它只对“单元格自身”生效,不干预内部元素布局。要让它对长文本真正起效,必须满足:
- 单元格所在行
<tr> 有足够高度(不能靠内容自动撑开),否则“居中”无参照空间
<li>避免内部元素(如 <code><p></p>)默认 margin 干扰——建议重置:p { margin: 0; }
- 如果单元格内是块级嵌套结构(例如
<div>
<p>...</p>
<button>...</button>
</div>),vertical-align 对这些子元素无效
长文本单元格推荐用 Flex 布局兜底
当内容复杂、行数不固定或需精确控制图文间距时,vertical-align 力不从心。直接把 <td> 变成 Flex 容器最稳妥:
<pre class="brush:php;toolbar:false;"><td style="display: flex; align-items: center; padding: 12px; min-height: 80px;">
<div>
<p>这是一段可能换行的长文本,还带标点和空格</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img
src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a>
<p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<small>副信息</small>
</div>
</td></pre>
<p>注意三点:</p>
<ul>
<li>
<code>min-height 必须显式设置,否则 Flex 容器高度塌陷,“居中”就没了意义
-
align-items: center 垂直居中,justify-content: center 水平居中(按需添加)
- 内部
<p></p> 不用再设 margin,Flex 会自然隔离内容
容易被忽略的细节:表格整体高度与行高冲突
<tr> 有足够高度(不能靠内容自动撑开),否则“居中”无参照空间
<li>避免内部元素(如 <code><p></p>)默认 margin 干扰——建议重置:p { margin: 0; }
<div>
<p>...</p>
<button>...</button>
</div>),vertical-align 对这些子元素无效长文本单元格推荐用 Flex 布局兜底
当内容复杂、行数不固定或需精确控制图文间距时,vertical-align 力不从心。直接把 <td> 变成 Flex 容器最稳妥:
<pre class="brush:php;toolbar:false;"><td style="display: flex; align-items: center; padding: 12px; min-height: 80px;">
<div>
<p>这是一段可能换行的长文本,还带标点和空格</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher"><img
src="https://img.php.cn/upload/skill/000/000/081/179109368394970.jpg" alt="Wechat HTML Publisher" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="overflowclass">Wechat HTML Publisher</a>
<p class="overflowclass">直接上传HTML富文本到微信公众号草稿箱。支持完整的HTML格式,无需Markdown转换。</p>
</div>
<a rel="nofollow" href="/xiazai/skill6712" title="Wechat HTML Publisher" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<small>副信息</small>
</div>
</td></pre>
<p>注意三点:</p>
<ul>
<li>
<code>min-height 必须显式设置,否则 Flex 容器高度塌陷,“居中”就没了意义
align-items: center 垂直居中,justify-content: center 水平居中(按需添加)<p></p> 不用再设 margin,Flex 会自然隔离内容即使你写了 vertical-align: middle 或用了 Flex,如果表格启用了 border-collapse: collapse 且没设 line-height,长文本可能因行高计算异常而贴顶或溢出。解决方案很简单:
- 统一给
th, td设line-height: 1.5(避免继承父级过小值) - 禁用
table { font-size: 0; }类 hack(它会让line-height失效) - 检查是否意外设置了
height: 0或max-height等限制性样式
vertical-align 当成了通用居中工具。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










