图片间空隙源于img作为inline元素响应HTML空白符,即使float:left也无法消除;解决需设父容器font-size:0或删空白,而非仅调margin。
float: left 排图片时,为什么图片之间有空隙?这不是“有空隙”,而是 img 默认是 inline 元素,会响应空白符(换行、缩进)产生间隙。即使写了 float: left,HTML 里换行仍会被渲染成约 4px 的空白。
margin 去“抵消”,而是先消灭空白来源img 父容器设为 font-size: 0,再给 img 单独设 font-size(如果需要文字)img 标签之间的所有换行和空格(不现实,可读性差)float: left + margin 的典型错误写法很多人给每个 img 加 margin-right: 10px,结果最后一张图也多出右边距,破坏布局边界。
:not(:last-child)
padding-right + 子项 margin-right: 0 来留边margin-left 给除第一张外的所有图加间距(即 :nth-child(n+2))float 更可靠float 本意是文字环绕,强行用于布局容易触发 BFC、清除浮动等问题,尤其在响应式场景下难维护。
display: flex:div.gallery { display: flex; gap: 10px; flex-wrap: wrap; } —— gap 自动跳过末尾,且支持响应式折行display: inline-block + font-size: 0 父容器,但需手动处理垂直对齐(vertical-align: top)float,此时务必加 .gallery:after 清除浮动:after 代码怎么写才不漏?只写 content: "" 不够,缺少关键样式会导致清除失效。
.gallery:after { content: ""; display: table; clear: both; }display: table 触发块格式化上下文(BFC),比 block 更稳妥overflow: hidden 代替,它可能意外裁剪 position: absolute 子元素height 或 border,清除浮动可能被忽略——优先检查是否已形成 BFCfloat 布局的脆弱性往往在加了 hover 动画、动态插入图片或适配移动端时突然暴露。与其反复调试 margin 和清除方式,不如一开始就用 flex。