最稳妥解法是父容器设 font-size: 0 并给每个 inline-block 子元素显式重设 font-size 和 line-height,兼容 ie8+;空白源于 html 解析器将换行/空格作为空格字符渲染,宽约 0.25em;flex + gap 是现代推荐方案。

直接设 font-size: 0 在父容器上,再给每个 inline-block 子元素显式重设 font-size 和 line-height,是最稳妥、兼容 IE8+ 的解法。别指望删空格或加负 margin 能稳定工作。
为什么 inline-block 元素之间总有 4px 左右的空白
那个“看不见的间隙”不是你漏写了 margin 或 padding,而是 HTML 解析器把换行符、空格、制表符当作文本节点渲染出来的空格字符(U+0020)。它属于行内格式化上下文(IFC)的正常行为,宽度 ≈ 父容器 font-size 的 0.25em(比如 font-size: 16px 时约 4px)。只要两个 display: inline-block 元素在源码里不在同一行,这个空格就存在。
它只影响 inline 和 inline-block 元素;display: block 或 flex 完全不受影响。
font-size: 0 必须写对位置且子元素必须重置
这个方法有效,但必须严格满足以下条件:
-
font-size: 0必须写在直接包裹inline-block子元素的父容器上。套多一层div却没设,空隙照旧 - 所有子元素会继承
font-size: 0,所以每个含文本的子元素必须显式声明font-size(如16px或1rem),不能只写inherit - 若子元素用了
em单位(如line-height: 1.5或margin: 0.5em),计算结果为 0,需改用无单位数值(如line-height: 1.5)或px/rem -
<img>虽无文本,但在旧版 Safari 中可能异常,建议统一加font-size: 16px
现代项目更推荐用 display: flex + gap
如果你的最低支持浏览器是 Chrome 89+、Firefox 63+、iOS Safari 14.1+,display: flex 是根治方案:
-
gap精确控制间距,不依赖 HTML 源码结构,删换行/加注释都无需操心 - 天然忽略空白文本节点,不用处理继承、不用写
calc(33.333% - 5.333px) - IE10–11 不支持
gap,可用margin-right: 8px :not(:last-child)降级
真正容易被忽略的是:当 legacy 代码还没重构完,有人一边用 font-size: 0,一边又叠加 transform: scale(0.99) 或 letter-spacing: -0.31em 补丁——这些补丁本身就会触发新的渲染异常,而且屏幕阅读器仍按原始 HTML 结构解析。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











