flex弹性布局最后一行不对齐的处理

5 篇文章 0 订阅

问题

属性值space-between可以实现两端对齐,最后一行个数不足以填满一行,出现没有完全垂直对齐的问题

.container{
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
}
.container .list{
    width: 24%;
    height: 100px;
    background-color: #2a80eb;
    margin-top: 15px;
}

解决方案:

一,每一行列数固定

1,模拟space-between属性值和间隙大小,使用margin对最后一行内容中出现的间隙进行控制

.container{
   display: flex;
    flex-wrap: wrap;
}
.container .list{
    width: 24%;
    height: 100px;
    background-color: #2a80eb;
    margin-top: 15px;
}
.container .list:not(:nth-child(4n)) {
    margin-right: calc(4% / 3);
}

2,根据元素个数给最后一个元素动态设置margin值

.container{
   display: flex;
   justify-content: space-between;
   flex-wrap: wrap;
}
.container .list{
   width: 24%;
   height: 100px;
   background-color: #2a80eb;
   margin-top: 15px;
}
.container .list:last-child:nth-child(4n - 1) {
   margin-right: calc(24% + 4% / 3);
}
.container .list:last-child:nth-child(4n - 2) {
   margin-right: calc(48% + 8% / 3);
}

二、flex子项宽度不固定,实现两端对齐的效果

1,给最后一项设置margin-right:auto

<div class="container">
    <div class="list"></div>
    <div class="list"></div>
    <div class="list" style="width: 12%"></div>
    <div class="list" style="width: 12%"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list" style="width: 22%"></div>
    <div class="list" style="width: 18%"></div>
    <div class="list"></div>
    <div class="list"></div>
</div>
.container{
   display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
}
.container .list{
    background-color: #2a80eb;
    margin: 10px;
    height: 100px;
}
.container .list:nth-child(4n) {
    width: 10%;
}
.container .list:nth-child(4n - 1) {
    width: 15%;
}
.container .list:nth-child(4n - 2) {
    width: 22%;
}
.container .list:nth-child(4n - 3) {
    width: 25%;
}
.container .list:last-child{
    margin-right: auto;
}

2,使用伪元素在列表的末尾创建一个flex子项,并设置flex:auto或设置flex:1

.container{
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
}
.container .list{
    background-color: #2a80eb;
    margin: 10px;
    height: 100px;
}
.container .list:nth-child(4n) {
    width: 10%;
}
.container .list:nth-child(4n - 1) {
    width: 15%;
}
.container .list:nth-child(4n - 2) {
    width: 22%;
}
.container .list:nth-child(4n - 3) {
    width: 25%;
}
.container::after{
    content: '';
    flex: auto;
}

三、每一行列数不固定

1,使用足够的空白标签进行填充占位,具体的占位数量是由最多列数的个数决定的。例如布局最多有7列,那我们可以使用7个空白标签进行填充占位;布局最多10列,那我们需要使用10个空白标签进行填充占位

<div class="container">
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <div class="list"></div>
    <i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i>
</div>
.container{
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    margin-right: -10px;
}
.container .list{
    width: 100px;
    height: 100px;
    background-color: #2a80eb;
    margin: 15px 10px 0 0;
}
.container > i{
    width: 100px;
    margin-right: 10px;
}

2,使用网格布局(grid布局)

.container{
 display: grid;
   justify-content: space-between;
   grid-template-columns: repeat(auto-fill,100px);
   grid-gap: 10px;
}
.container .list{
   width: 100px;
   height: 100px;
   background-color: #2a80eb;
   margin-top: 5px;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值