最可靠方式是用col+table-layout:fixed:必须设table{table-layout:fixed;width:100%或具体值},col数量与列数严格匹配且为table直接子元素,用style="width:25%"而非废弃的width属性,并配合white-space等控制内容溢出。

让 HTML 表格每一列宽度相同,最可靠的方式是用 col + table-layout: fixed,而不是靠 width="100%" 或平均分配类名“碰运气”——后者在内容不均、浏览器差异下极易失效。
必须设 table-layout: fixed
没这句,col 的宽度只是参考值,浏览器仍按内容撑开列宽,尤其第一行有长文本时,整列就跑偏。
-
table { table-layout: fixed; }是硬性前提,不能只写在局部样式里,得确保它生效(比如没被更具体的 CSS 覆盖) - 必须配合
table有明确宽度(如width: 100%或width: 800px),否则百分比无法计算 - 如果父容器宽度不固定(比如 flex 项里没设
min-width),100%会塌缩,导致列宽归零
col 数量和顺序必须严格匹配列数
4 列表格就得写 4 个 col,少一个,最后一列常塌成一条线(Safari 尤其明显);多一个,多余项完全无效。
- 写
<col span="4">不等于“设四列都一样”,它只让第一个col生效,后三列回退为自动宽度 - 想四列等宽?写四个
<col style="width: 25%">,或四个<col style="width: 1fr">(注意:原生<table> 不支持 <code>fr单位,Chrome/Firefox 仅实验性支持,生产环境慎用) - 动态生成表格时,JS 插入
<tr><td>...</td></tr>后再补colgroup—— 浏览器已忽略,必须同步生成 - 正确写法只有两种:
<col style="width: 120px">或<col class="w-120">配合 CSS 类 -
width: auto在col中无效,会被当 0 处理;width: 100%必须基于 table 宽度,不能套用父容器宽度 - 推荐用 class:
<col class="col-equal">+.col-equal { width: 25%; },便于复用、主题切换和维护 - 给
td和th加:white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - 若需换行,改用
word-break: break-word;或break-all;,但注意这会破坏单词完整性 - 边框、padding、border-box 没设好也会导致视觉宽度偏差,建议统一
box-sizing: border-box;
col 的 width 属性已废弃,必须用 CSS
<col width="120"> 在所有现代浏览器中静默失效,不是兼容问题,是 HTML5 标准移除。
防内容撑开:td/th 必须加 white-space 控制
即使列宽设死,长文本、URL、无空格字符串仍会强制撑开单元格,破坏等宽效果。
最容易被忽略的点是 colgroup 的位置:它必须是 <table> 的**直接子元素**,且严格位于 <code><caption></caption>(如有)之后、<thead> 之前——放错位置 DevTools 里根本看不到效果,浏览器直接跳过解析。</thead>
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











