col标签是唯一能语义化精准绑定第n列的html元素,必须置于colgroup内且位于table开头、thead之前;width属性已废弃,须用css设置,并配合table-layout:fixed和明确的table宽度才能可靠控制列宽。

col 标签本身不渲染内容,但它是唯一能语义化、精准绑定到「第 N 列」的 HTML 元素。只要结构正确、CSS 配合得当,它就能稳定控制列宽——不是“可能生效”,而是“必须这样才可靠”。
col 必须放在 colgroup 里,且位置不能错
浏览器只认 <table> 开头后、<code><thead> 或第一行 <code><tr> 之前的 <code><colgroup></colgroup>;放错位置(比如塞进 <tbody> 里)不会报错,但 DevTools 里根本看不到效果,样式被静默跳过。
<ul><li>
<code><colgroup></colgroup> 必须是 <table> 的直接子元素
<li>多个 <code><col> 按顺序一一对应表格中的列,数量必须严格匹配(少一个,最后一列就失去控制;多一个,多余 <col> 完全无效)
<caption></caption>,<colgroup></colgroup> 要放在它后面、<thead> 前面
<h3>width 属性已废弃,只能用 CSS 的 width</h3>
<p>HTML5 明确废弃了 <code><col width="100"> 这种写法,所有主流浏览器都会忽略它。你看到的“好像生效”,其实是旧版兼容残留,不能依赖。
- ✅ 正确:
<col style="width: 120px">或<col class="w-120">+ CSS.w-120 { width: 120px; } - ❌ 错误:
<col width="120">、<colgroup width="100%"></colgroup> - ⚠️ 注意:
span不是“广播宽度”,<col span="3" style="width: 300px">只会让第 1 列宽 300px,第 2、3 列仍按默认逻辑分配——真要三列等宽,就得写三个<col style="width: 100px">
table-layout: fixed 是列宽可控的前提
没设这个,col 的 width 就是摆设。浏览器默认用 auto 布局,反复测量内容来定列宽,col 的值会被无视。
- 必须显式加:
table { table-layout: fixed; } - 同时确保
<table> 有明确宽度(如 <code>width: 100%或width: 800px),否则百分比width在col里算不出来 - 首行
<th>/</th> <td> 的内容长度不再影响列宽分配,整列宽度完全由 <code>col或 CSS 决定col 支持的样式非常有限,别指望它管文字对齐或字体
col只能控制列的“骨架”属性:宽度、背景色、边框(需配合border-collapse: collapse)、可见性(visibility: collapse)。其他都得靠单元格自己来。- ❌ 不支持:
text-align、color、font-size、padding、vertical-align - ✅ 支持:
width、background、border、visibility(注意:IE 不支持visibility: collapse对col) - 要让某列文字右对齐?写
td:nth-child(3), th:nth-child(3) { text-align: right; },别碰col
最易被忽略的点:动态生成表格时,
col数量和实际列数必须实时同步。JS 插入新列却忘了补<col>,那一列就彻底脱离样式控制——这种问题在 DevTools 里看不出报错,只会默默失效。 - ❌ 不支持:











