答案是margin和padding导致块级元素间隙,而非空白字符;需确认元素为真块级(如<div><p>),再针对性重置margin/padding,font-size:0无效,overflow:hidden不解决根本问题。

margin 和 padding 是造成相邻块级元素间隙的主因,不是“看不见的空格”——那是 inline-block 才会遇到的问题。先确认你面对的是真·块级元素(如 <div>、<p>、<h1>),再动手。
为什么两个 <div> 之间总有空隙
浏览器对部分块级元素(尤其是 <p>、<h1>–<h6>、<ul>、<ol>)内置了默认 margin。例如 Chrome 中 <p> 默认有 margin: 1em 0,上下各留出约 16px 空白;<h2> 同样带上下外边距。
- 这个间隙不是 HTML 换行导致的,删掉换行或加注释毫无作用
- 它和字体大小、基线对齐无关,
font-size: 0在这里完全无效 - 检查方式:打开 DevTools,选中元素,看
Computed面板里margin-top/margin-bottom是否非零
最直接有效的清除方式:重置 margin 和 padding
不要只写 div { margin: 0; padding: 0; } —— 这会覆盖所有 <div> 的内边距和外边距,可能破坏已有布局。应该按需清除:
- 若只是想让两个特定
<div>紧贴,给后一个加margin-top: 0 - 若批量处理段落,用
p { margin: 0; }或更安全的p + p { margin-top: 0; }(只影响紧接在另一个<p>后面的段落) - 通用重置可写成:
* { margin: 0; padding: 0; },但必须放在 CSS 最前面,且要意识到它会影响所有元素(包括<button>、<input>等)
当 overflow: hidden 被误用时
有人发现给父容器加 overflow: hidden 后间隙“消失”了,这其实是巧合:它触发了 BFC(块格式化上下文),间接清除了某些浮动或塌陷带来的视觉错位,但**不解决默认 margin 问题**。
立即学习“前端免费学习笔记(深入)”;
-
overflow: hidden对<p>A</p><p>B</p>的间隙毫无影响 - 它可能掩盖由
float引起的父容器高度塌陷,让人误以为“间隙没了” - 滥用会导致内容截断、滚动失效等副作用,不建议作为间隙解决方案
兼容性与维护提醒
现代项目中,margin-collapse(外边距合并)行为依然存在:相邻块级元素的垂直 margin 会取较大者,而不是相加。这意味着即使你设了 margin-bottom: 20px 和 margin-top: 10px,实际间隙仍是 20px,不是 30px。
- 这个机制无法关闭,只能接受或规避(比如用
padding替代其中一个margin) - IE6/7 下还有双倍边距 bug(
float元素的margin),但当前已基本无需考虑 - 真正容易被忽略的点是:你清除的到底是不是默认 margin?还是某个第三方 CSS 框架(如 Bootstrap)注入的样式?务必用 DevTools 看来源



















