col 元素的 width 属性在现代浏览器中已完全失效,html5 规范明确废弃;有效写法是用 style="width: 120px" 或 css 类,且必须配合 table-layout: fixed 和明确的 table 宽度。

col 元素的 width 属性在现代浏览器中已完全失效,写 <col width="120"> 不会产生任何视觉效果——这不是兼容性问题,而是 HTML5 规范明确废弃的结果。
为什么 col width="120" 没反应
Chrome、Firefox、Safari 全部静默忽略该属性。DevTools 中能看到标签,但 computed styles 里根本查不到宽度值。它只作为 HTML4 的历史残留存在,不能用于生产环境。
- ✅ 有效写法:
<col style="width: 120px">或<col class="w-120">(配合 CSS.w-120 { width: 120px; }) - ❌ 无效写法:
<col width="120">、<col width="30%">、<colgroup width="100%"></colgroup> - ⚠️ 注意:
span不广播宽度 ——<col span="3" style="width: 300px">只让第 1 列宽 300px,后两列不受影响
col 必须配合 table-layout: fixed 才能生效
即使写了 style="width: 120px",若没设 table-layout: fixed,列宽依然由内容决定,长文本照样撑开整列。
- 必须在
<table> 上显式声明:<code>style="table-layout: fixed; width: 100%"(或具体像素值,如width: 800px) - 百分比宽度(如
width: 30%)是基于<table> 自身宽度计算,不是父容器 <li>如果 <code><table> 父容器没宽(比如空 <code><div>),<code>width: 100%会退化为 auto,导致所有列宽失控colgroup的位置和数量必须严格匹配<colgroup></colgroup>不是“随便放”的容器,结构错一点,整个列宽控制就静默失效。- 必须是
<table> 的**直接子元素**,且顺序固定:<code><caption></caption>(如有)→<colgroup></colgroup>→<thead> 或第一行 <code><tr> <li>错例:<code><tbody><colgroup></colgroup></tbody>或<table><tr><colgroup></colgroup></tr></table>—— 浏览器直接丢弃,DevTools 里看不到效果 -
<col>数量必须与表格实际列数完全一致:少一个,最后一列塌缩(Safari 尤其明显);多一个,多余项无作用 - 监听
mousedown在<th> 右侧伪元素上,读取当前 <code>th.style.width或getComputedStyle(th).width -
mousemove时,同时更新当前<th> 和同列所有 <code><td> 的 <code>style.width(不统一设宽会导致错位) - 拖拽结束时,再把新宽度写回对应
<col>的width属性(仅作序列化或服务端回传用) - 避免对
<col>设置style.width—— 它不响应 CSS 样式,设了也无效
拖拽调整列宽时别只改
col的width属性<col>是只读快照,不是控制枢纽。拖拽逻辑必须同步更新单元格的style.width,否则浏览器不重绘。最易被忽略的不是怎么写样式,而是
<colgroup></colgroup>放错位置、<table> 缺少明确宽度、以及漏掉 <code>table-layout: fixed—— 这三点任一缺失,后面所有设置都白搭。 - 必须是











