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

margin 和 padding 是造成相邻块级元素间隙的主因,不是“看不见的空格”——那是 inline-block 才会遇到的问题。先确认你面对的是真·块级元素(如 <div>、<code><p></p>、<h1></h1>),再动手。
为什么两个 <div> 之间总有空隙<p>浏览器对部分块级元素(尤其是 <code><p></p>、<h1></h1>–<h6></h6>、<ul></ul>、<ol></ol>)内置了默认 margin。例如 Chrome 中 <p></p> 默认有 margin: 1em 0,上下各留出约 16px 空白;<h2></h2> 同样带上下外边距。
- 这个间隙不是 HTML 换行导致的,删掉换行或加注释毫无作用
- 它和字体大小、基线对齐无关,
font-size: 0 在这里完全无效
- 检查方式:打开 DevTools,选中元素,看
Computed 面板里 margin-top / margin-bottom 是否非零
最直接有效的清除方式:重置 margin 和 padding
font-size: 0 在这里完全无效Computed 面板里 margin-top / margin-bottom 是否非零margin 和 padding
不要只写 div { margin: 0; padding: 0; } —— 这会覆盖所有 <div> 的内边距和外边距,可能破坏已有布局。应该按需清除:<ul><li>若只是想让两个特定 <code><div> 紧贴,给后一个加 <code>margin-top: 0
p { margin: 0; } 或更安全的 p + p { margin-top: 0; }(只影响紧接在另一个 <p></p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5806" title="html-deploy"><img
src="https://img.php.cn/upload/skill/000/000/081/179066538882434.jpg" alt="html-deploy" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5806" title="html-deploy" class="overflowclass">html-deploy</a>
<p class="overflowclass">使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。</p>
</div>
<a rel="nofollow" href="/xiazai/skill5806" title="html-deploy" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div> 后面的段落)* { margin: 0; padding: 0; },但必须放在 CSS 最前面,且要意识到它会影响所有元素(包括 <button></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 看来源










