应统一用CSS padding替代已废弃的cellpadding属性,需配合border-collapse: collapse、box-sizing: border-box及内联样式等兼容性处理。

直接用 padding,别碰 cellpadding
cellpadding 是 HTML4 的遗留属性,W3C 已标记为 obsolete。它只能写在 <table> 上,全局生效、单位固定为 px、无法响应式、不能被 <code>!important 覆盖,且在严格模式下校验失败。所有现代项目应统一用 CSS 的 padding 控制 <td> 和 <code><th>。
<ul>
<li>写法示例:<code>td, th { padding: 8px 12px; }(上下 8px,左右 12px)
th { padding-top: 10px; padding-bottom: 10px; } <td class="tight">→ .tight { padding: 4px; } <li>邮件模板里 Outlook 可能忽略 <code><style></style> 块?必须用内联:<td style="padding: 6px">
<h3>
<code>border-collapse: collapse 必须先设,否则 padding 会和 border-spacing 打架
默认 border-collapse 是 separate,此时 padding 和 border-spacing 同时起作用,视觉间距 = padding + border-spacing,极易失控。真实项目中多数表格需要紧凑外观,所以:
- 先显式声明:
table { border-collapse: collapse; } - 此时
border-spacing失效,padding成为唯一可控变量 - 若必须保留
separate(如带分隔线的报表),则border-spacing管单元格间隙,padding管内容到边框距离,二者不可混用目标
移动端或打印时内边距错位?检查 box-sizing 和根字体
padding 用 rem 单位时,若用户缩放页面或系统字体设置变化,html 的 font-size 动态变,padding 也会跟着变——这通常是优点,但若需绝对稳定:
- 加锁定:
html { font-size: 16px; } - 表头
<th> 和数据行 <code><td> 高度不一致?大概率是 <code>box-sizing不统一:td, th { box-sizing: border-box; }(避免 padding 加 border 导致高度溢出) - 打印预览文字贴边?不是 padding 不够,而是媒体查询没覆盖:
@media print { td, th { padding: 4px 6px; } } - 想让整个表格离周围元素有空隙?用
margin,不是padding - 想撑开表格宽度?靠
min-width或列宽控制(td { min-width: 120px; }),不是往table加 padding - 某些 UI 库(如 Ant Design)内部把表格渲染成
div+display: table,此时更得确认 computed styles,别凭经验猜
给 <table> 设 <code>padding 是白忙活<table> 是 display: table 元素,不支持传统块级容器的 <code>padding 行为。你写 table { padding: 20px; },浏览器会静默忽略。
真正麻烦的从来不是“怎么加内边距”,而是加完之后发现表头和数据行高度不齐、打印时内容被截断、或者在旧版 Outlook 里完全失效——这些几乎都源于没同步处理 border-collapse、box-sizing 和内联样式兼容性。动手前打开 DevTools,看一眼 computed styles 里的 actual padding 值,比猜更可靠。



















