table-layout: fixed 是实现表格等宽布局的必要前提,必须与 width: 100% 同时作用于 table 元素,列宽由首行 th/td 的 width 决定,且需配合 white-space、word-break、box-sizing 等样式确保文本正常换行和尺寸准确。

table-layout: fixed 是等宽布局的前提
不加这个声明,width 在 <td> 或 <code><th> 上基本无效——浏览器仍按内容撑开列宽,你写的 <code>width: 25% 只是“建议”,不是指令。
-
table-layout: fixed必须作用于<table> 元素本身,不能只写在 <code><tr> 或 <code><td> 上 <li>必须搭配 <code>width: 100%(或其他明确宽度值)一起用,否则浏览器按默认算法计算总宽,列宽可能塌缩或溢出 - 启用后,列宽完全由第一行单元格(或
<col>)的width决定,后续行内容不再影响列宽分配 - 若某列需微调(如首列稍宽),可用
<col width="30%">+<col width="23.33%">× 3,但要手动算准总和 - 检查是否误设了
white-space: nowrap(很多重置样式表会全局给td加这个) - 长单词需显式断行:
word-break: break-word或overflow-wrap: break-word -
box-sizing: border-box必须加上,否则padding和border会撑出 25% 的设定宽度 - 移动端建议加
min-width: 120px防止百分比算出来太窄,文字叠在一起
用 <col> 还是用 td { width: 25% }?
优先用 <colgroup></colgroup> + <col>,语义清晰、优先级高、不受选择器权重干扰;td { width: 25% } 也能用,但容易被其他样式覆盖,且需确保 <th> 同步设置,否则表头列宽错位。
<ul><li>
<code><colgroup></colgroup> 必须紧跟在 <table> 开始标签后、<code><thead> 前,顺序错一位就失效
<li>四列等宽可写:<code><col style="width: 25%"> × 4,总和不要超过 100%,否则触发横向滚动条
为什么设置了等宽,文字还是挤成一团?
常见原因是换行没生效,尤其在小屏或含长单词(URL、哈希)的单元格里。这不是宽度没设对,而是文本渲染规则没调好。











