欢迎各位兄弟 发布技术文章
这里的技术是共享的
如果图片高度不一致但仍需要 每 4 张清除浮动,同时保证布局整齐,可以使用以下方法:
clear: both
+ float: left
(兼容方案)
适用于传统浮动布局,但要注意图片高度不同可能导致错位。 感觉高度不同不会错位 这种方法 OK 有大用 有大大用
css.gallery img { float: left; /* 让图片浮动 */ width: 25%; /* 4 张并排 */ } /* 每 4 张图片后清除浮动 */ .gallery img:nth-child(4n+1) { clear: both; }
html<div class="gallery"> <!-- 图片1-4 --> <img src="1.jpg"> <img src="2.jpg"> <img src="3.jpg"> <img src="4.jpg"> <!-- 图片5-8 --> <img src="5.jpg"> <img src="6.jpg"> <img src="7.jpg"> <img src="8.jpg"> </div>
问题:
图片高度不同时,可能会在某些行出现 错位(如第5张可能跑到第1行的末尾)。感觉高度不同不会错位
Flex 可以自动换行,但不会 完美对齐(不同行可能高度不整齐)。
css.gallery { display: flex; /* 启用 flex 布局 */ flex-wrap: wrap; /* 自动换行 */ } .gallery img { flex: 0 0 25%; /* 每行 4 张 */ }
优点:
自动排列,不会像浮动那样错位。
但 不同行的图片仍然高度不同,可能出现 参差不齐(flexbox 不能自动填充空白)。
Grid 可以 固定列数,并且可以配合 grid-auto-rows
控制最小行高。
css.gallery { display: grid; grid-template-columns: repeat(4, 1fr); /* 4 列 */ grid-auto-rows: minmax(100px, auto); /* 最小行高 100px,可自适应 */ gap: 10px; /* 图片间距 */ } .gallery img { width: 100%; /* 适应 grid 单元格 */ height: auto; /* 保持比例 */ }
优点:
整齐排列,即使图片高度不同,也能保持 行对齐。
可以调整 gap
控制间距。
最适应 不同高度的图片。
nth-child
+ 额外清除元素
如果一定要使用 float
,可以在每 4 张 后手动插入一个 clear: both
的元素: 这种方法 OK 有大用
css.gallery::after { content: ""; display: table; clear: both; } .gallery img { float: left; width: 25%; }
html<div class="gallery"> <!-- 图片1-4 --> <img src="1.jpg"> <img src="2.jpg"> <img src="3.jpg"> <img src="4.jpg"> <div style="clear: both;"></div> <!-- 插入清除浮动 --> <!-- 图片5-8 --> <img src="5.jpg"> <img src="6.jpg"> <img src="7.jpg"> <img src="8.jpg"> <div style="clear: both;"></div> <!-- 插入清除浮动 --> </div>
缺点:
需要修改 HTML 结构,不够灵活。
✅ CSS Grid
是最好方案,能保证 每行 4 个,并且对齐整齐。
✅ 如果不需要严格对齐, flexbox
也很方便。
❌ 浮动(float) 在高不一致时容易错位,不推荐。
你能接受哪种方案?或者需要进一步优化?