HTML解析器将标签间换行/空格压缩为一个空格,当元素为inline或inline-block时,该空格被渲染为可见间隙;消除方法包括父容器font-size:0、删除HTML空白或使用注释“吃掉”空白。

为什么
之间有看不见的空隙
HTML 解析器会把标签之间的换行符、制表符和多个空格,统一压缩成一个空白字符。当这些标签是 inline 或 inline-block 类型时(比如未显式设 display 的 、、),这个“一个空格”就会被渲染为可见的水平间隙。
常见现象:多张图片并排时出现 4px 左右的白缝; 没有“万能解”,要根据场景选: 不推荐用 很多人想给 最易被忽略的是:缩进单位用 用 inline-block 布局时文字错位;富文本中 和
margin 和 padding 都是 0 也可能有缝inline 元素之间有换行或空格,就可能触发 默认是块级元素,它和相邻 之间的换行不会产生间隙;但若你把它改成 display: inline-block,那就立刻中招消除间隙的三种可靠写法
font-size: 0,子元素重置字体大小:.gallery { font-size: 0; } .gallery img { font-size: 16px; } —— 简单粗暴,但需注意子元素内文本要显式恢复字号 写成一行,或用 HTML 注释“吃掉”空白:float: left 让子元素脱离文档流(需清浮动):.gallery img { float: left; } + 父容器加 ::after 清除,适合老项目兼容 IE9+margin-left: -4px 这类魔法数字硬调:不同字体、不同浏览器下空白宽度浮动,且响应式缩放后容易失效。为什么 display: flex 能根治这个问题
flex 容器完全绕过了 HTML 空白字符的渲染逻辑。子项无论是否换行、是否有空格,都不会产生间隙。
display: flex,默认 flex-direction: row 就够了flex-wrap: wrap;若想等宽分布,用 justify-content: space-between
inline-block,flex 下它会自动变成 flex item,vertical-align 失效,但间隙没了富文本区域里怎么安全缩进段落又不拉出间隙
加 text-indent 实现首行缩进,结果发现段落之间多了空行——其实是误用了 margin-top 或没重置 margin-bottom。
默认有 margin-top 和 margin-bottom(通常 1em),连续段落会形成“双倍间距”.rich-text p { text-indent: 2em; margin-top: 0; margin-bottom: 1em; }
、 或 ,它们不该缩进,必须单独排除:.rich-text pre, .rich-text code { text-indent: 0; }.rich-text * { text-indent: 2em },否则 和列表项也会被缩进,视觉混乱em,但段落内嵌了 font-size 更小的 或 span,text-indent 仍按父级字号计算,不会随子元素变小——这反而是优点,保证首行对齐稳定。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











