HTML5 中 align 属性已废弃,必须用 CSS 实现对齐:text-align 控制单元格内行内内容水平居中,margin: 0 auto 配合 width 实现表格整体居中,vertical-align: middle 控制单元格内容垂直居中。

HTML5 中 align 属性已完全废弃,不能用于可靠对齐 —— 无论你写在 <table>、<tr>、<td> 还是 <th> 上,它都不再是合法 HTML,且行为不可控。
为什么 align="center" 看似有效却必须停用
浏览器出于兼容性仍会解析 align,但它实际触发的是非标准渲染逻辑:比如 <table align="center"> 会让表格变成 display: inline-table,导致 width 和 margin 失效;<td align="center"> 虽常“看起来居中”,但一旦被 CSS 覆盖(如父级设了 text-align: left),或在某些 WebView(如旧版 Android System WebView)中就直接失效。
- W3C 验证器会报错:
Attribute align is obsolete. Use CSS instead. - 无障碍工具可能忽略它,影响可访问性
- 严格 doctype(
<!DOCTYPE html>)下属于无效标记,未来浏览器可能彻底移除支持
text-align: center 是水平居中的唯一可靠方式
它作用于单元格内部的行内内容(文本、图片、<span> 等),不改变单元格自身位置。关键点在于:它只对“行内流内容”起效,对块级子元素(如 <div>、<p>)无效 —— 后者需单独处理。
- 单个单元格:
<td style="text-align: center;">文字</td> - 整列控制:用
<col class="center-col">+ CSS.center-col { text-align: center; } - 整表统一:
td, th { text-align: center; },但注意这会覆盖所有单元格,例外项需用更具体选择器重置 - 如果单元格里有
<div style="display: block;">,仅设text-align: center不会让该<div>居中 —— 它需要自己加margin: 0 auto或display: flex; justify-content: center
margin: 0 auto 让整个表格在页面中居中
这是让 <table> 水平居中的标准做法,但有两个硬性前提:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
立即学习“前端免费学习笔记(深入)”;
-
<table>必须是块级上下文中的块级框(默认就是,无需额外设display: block) - 必须指定明确宽度,例如
width: 80%、width: 600px或响应式组合width: 100%; max-width: 800px;—— 否则margin: 0 auto无基准可算,直接失效 - 避免包裹它的父容器有
float、display: inline或overflow: hidden等干扰布局的样式 - 别用
display: flex父容器居中表格 —— 它会破坏colspan/rowspan的渲染逻辑,打印预览和部分屏幕阅读器也可能出错
vertical-align: middle 控制单元格内垂直居中
它只对 <td> 和 <th> 生效,不能写在 <table> 或 <tr> 上。注意:它不是让单元格在整行中垂直居中,而是让单元格内的内容(行内内容或表格单元格本身)相对于该单元格的行内框对齐。
- 整表统一垂直居中:
td, th { vertical-align: middle; } - 单个单元格:
<td style="vertical-align: middle;">内容</td> - 若单元格高度由内容撑开,
vertical-align: middle效果明显;若设了固定height但内容少,它会让内容在剩余空间中居中 - 不要和
text-align混淆:一个管上下,一个管左右,必须同时设置才能实现“十字居中”
最易被忽略的复杂点:当单元格里嵌套了 display: block 元素(比如 <div> 或设置了 display: block 的图片),text-align: center 对它完全无效 —— 此时你要么改子元素为行内显示,要么给它加自己的居中规则,而不是反复调大父级的 text-align 优先级。


















