text-align必须加在<td>或<th>上才生效,因table不渲染文本;常见错误是写table{text-align:center},实际依赖继承且不稳定;应显式设置td,th{text-align:left}并避免废弃的align属性。

直接给 td 或 th 加 text-align: left 就行,但必须避开几个常见误操作——比如给 table 元素设 text-align,它压根不生效。
为什么 text-align: left 写在 table 上没用
text-align 只对包含文本的块级或表格单元格元素起作用,table 本身不渲染文字内容,所以写在它上面完全无效。你看到表头居中、数据左对齐,其实是浏览器默认样式在起作用:th 默认带 text-align: center,td 默认是 text-align: left。一旦父容器有 text-align: center,整个表格就“被居中”了,这是最常被忽略的干扰源。
- 检查父容器是否设置了
text-align: center或display: flex+justify-content: center - 不要依赖浏览器默认行为,显式声明
th { text-align: center; }和td { text-align: left; } - 如果整张表都要左对齐,优先写
td, th { text-align: left; },再单独覆盖表头
如何让某几列左对齐(比如第一列姓名、第二列地址)
用 :nth-child(n) 是最稳定的方式,它按列序号匹配,不依赖类名,也不怕结构微调。注意必须同时选中 th 和 td,否则表头和数据对不齐。
-
th:nth-child(1), td:nth-child(1) { text-align: left; }→ 第一列全部左对齐 -
th:nth-child(2), td:nth-child(2) { text-align: left; }→ 第二列也左对齐 - 别写成
tr td:first-child,那只影响第一行首列;也别用:nth-of-type(),在thead/tbody混排时会错位
用 col 标签预设左对齐是否可行
可以,但限制多。col 支持 text-align,适合整列表格统一风格,不过它只在未被单元格自身样式覆盖时生效,优先级低于内联 style,高于后代选择器。
立即学习“前端免费学习笔记(深入)”;
- 必须放在
<table>开始后、<thead>或第一个<tr>之前 -
<col style="text-align: left;"><col style="text-align: right;">→ 前两列分别左/右对齐 - 旧版 Android WebView 对
col的style支持不稳定,生产环境建议搭配类名兜底
千万别再用 align="left" 属性
这个属性在 HTML5 中已彻底废弃。Chrome 和 Firefox 新版本虽然还能解析,但 W3C 验证器报错,Safari 行为不一致,且和 CSS 的 text-align 优先级关系模糊,容易覆盖失败。
-
<td align="left">张三</td>→ 不推荐,语义混乱,未来可能失效 -
<table align="left">→ 这个align控制的是表格自身浮动位置,和单元格内容无关 - 真要让表格左对齐,不用任何
align,确保父容器没干扰样式即可——表格默认就是左对齐的
最易被忽略的一点:垂直对齐和水平对齐是两套独立机制,vertical-align 必须写在 td 或 th 上才有效,而且它只控制单元格内部内容的位置,不是让整行上下居中。如果没设固定高度,vertical-align: middle 很可能看不出效果。



















