解决flex布局space-between 最后一行不对齐的问题

博客主要围绕前端布局问题展开,介绍了两种解决方法。一是给父级元素后面添加伪元素;二是进行计算,适用于行列宽度固定情况,还给出最后一行元素动态设置margin - right的计算公式。此外,提到用gap布局实现会更方便。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现的问题:

方法一:给父级元素后面添加伪元素

在父盒子的样式里添加下列代码:

&::after {
					content: '';
					flex: auto;
				}

方法二:计算 

适用于每一行列数固定,且列宽度固定,需要进行计算,相比较复杂

方案: 对于最后一行的元素动态设置margin-right。判断如果最后一个元素处于当前列,会发生布局错乱,则设置元素的 margin-right 为剩余空间的大小(剩余列宽度+剩余间隙大小)。假设元素宽度是$width,总间隙是 $space(盒子宽度-元素宽度*列数)。

计算公式: margin-right: calc( ($space / 间隙数) * 剩余列数 + $width * 剩余列数 )

三列布局

计算方法:

最后一个元素所处列数剩余空间margin-right
第二列(li:last-child:nth-child(3n - 1))第三个元素宽度+剩余间隙($space / 2) * 1 + $width * 1

代码:

<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

ul {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

li {
  width: 30%;
  margin-bottom: 20px;
  height: 200px;
  background: pink;
}

/* 三列布局,li宽度为30%,则剩余间隙:100% - 30% * 3 = 10% */
/* 如果最后一行是2个元素 calc(10% / 2 * 1 + 30% * 1) 可简化 */
ul>li:last-child:nth-child(3n - 1) { margin-right: calc(10% / 2 + 30%) }

四列布局

计算方法:

最后一个元素所处列数剩余空间margin-right
第二列(li:last-child:nth-child(4n - 2))

第三个元素宽度+第四个元素宽度+剩余间隙

($space / 3) * 2 + $width * 2
第三列(li:last-child:nth-child(4n - 1))第四个元素宽度+剩余间隙($space / 3) * 1 + $width * 1
/* 四列布局,li宽度为22%,则剩余间隙:100% - 22% * 4 = 12% */
/* 如果最后一行是2个元素 calc(12% / 3 * 2 + 22% * 2) 可简化 */
ul>li:last-child:nth-child(4n - 2) { margin-right: calc(24% / 3 + 44%) }
/* 如果最后一行是3个元素 calc(12% / 3 * 1 + 22% * 1) 可简化 */
ul>li:last-child:nth-child(4n - 1) { margin-right: calc(12% / 3 + 22%) }

by the way  可以换成gap布局去实现会方便的多 flex + 允许换行 + gay设置列和行的间距

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柑橘乌云_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值