给td和th加padding才有效,因表格“单元格边距”实为内容到边框距离,只能通过td/th的padding控制;table的padding无效,cellpadding已过时且不灵活。
HTML 表格的“单元格边距”实际指的是内容到单元格边框的距离,这个距离只能通过 CSS 的 padding 作用于 td 或 th 元素来控制。直接给 table 写 padding 是无效的——浏览器会忽略它。
常见错误是误用 cellpadding 属性:
虽然还能渲染,但它已被 HTML5 标记为 obsolete(过时),且有硬限制:
只能全局设置,无法单独控制某列、某行或某个 td
单位固定为像素,不支持 rem、% 或媒体查询
一旦存在任何 CSS 的 td, th { padding: ... },cellpadding 就完全失效
正确写法示例:
td, th { padding: 8px 12px; }或针对表头强化:
th { padding: 12px 16px 10px; }td { padding: 6px 12px; }
border-collapse: collapse 必须配 padding 一起用
如果不设 border-collapse,表格默认是 border-collapse: separate,此时 padding 会和 border-spacing(等效于旧的 cellspacing)叠加,导致视觉间距不可控,尤其在有边框时容易“撑开”行高。
推荐做法是统一先收拢边框再调内边距:
加 border-collapse: collapse 到 table 上,消除默认单元格间隙
再给 td/th 设 padding,效果干净可预期
避免同时设 border-spacing 和 padding,除非你明确需要分离边框+留白的特殊布局
错误组合:
table { border-spacing: 4px; }td { padding: 8px; } // 实际垂直/水平间距 ≈ 4px + 8px + 8px = 20px
响应式场景下 padding 单位选 rem 或 em 更稳妥
用像素(px)在移动端容易导致文字贴边或留白过小;而 rem 随根字体缩放,适配用户系统字号设置和页面 zoom,更适合现代项目。
但要注意两点:
若项目已锁定 html { font-size: 16px; },0.5rem ≈ 8px,可快速换算
某些老邮件客户端(如 Outlook Desktop)不支持 块里的 td 样式,必须用内联:
在打印样式(@media print)中,rem 可能因打印机 DPI 解析异常,建议打印时降级为 px
移动端宽表格加 padding 前先防溢出
给 td 加大 padding 后,如果表格本身宽度接近父容器,可能触发横向滚动条,甚至内容被截断——这不是 padding 本身的问题,而是盒模型叠加后的总宽度超限。
解决路径很直接:
确保父容器有 overflow-x: auto,让表格可横向滚动
对窄屏加媒体查询,缩小 padding 值:
@media (max-width: 768px) {td, th { padding: 4px 8px; }
}
避免在 td 上同时设大 padding + 固定 width,否则容易破坏自适应
真正容易被忽略的是:加完 padding 后,如果发现表头和数据行高度不一致,大概率是因为没同步处理 box-sizing: border-box —— 默认 content-box 下,padding 会让高度额外增加,而 th 常带默认 font-weight 影响行高计算。