zoukankan      html  css  js  c++  java
  • space-between最后一栏的填充问题(不使用v-if)

    在采用弹性布局,接着使用justfiy-content:space-between来进行操作的时候会遇到如下问题

    也就是说当栏目数目不够,无法填充完整一栏的时候就会出现这种情况

    解决方法如下(代码下有解析),此处我用的是vue

    第一步

    以四列为例

      <div class="ItemContainer" v-for="indexa in (4-current.length%4)" :key="indexa+'a'"></div>
    

    首先和大家想的一样,使用空div来解决

    是利用取余的方式对整个长度进行取余,然后用每行的个数减去余数得出需要填充的div数目

    for循环然后填充空的div来解决

    效果如下

    炸一看效果不错,但是其中存在着问题,当我们将最有一个格子渲染在页面上的时候就会发现问题所在

    此处我渲染了一个1,再来查看效果

      <div class="ItemContainer" v-for="indexa in (4-current.length%4)" :key="indexa+'a'">1</div>
    

    似乎还不错,有几个空的就补了几个,然而当数量填满的时候会出现如下问题

    结合代码看一下

      <div class="ItemContainer" v-for="indexa in (4-current.length%4)" :key="indexa+'a'">1</div>
    

    当栏目数目为12时,12%4结果自然为0,4-0结果为4所以就出现了四个,目前最后一行和填充的div数目对应关系如下

    最后一行的数目 需要填充的div数目 我们的式子计算出来的结果
    1 3 4-1=3
    2 2 4-2=2
    3 1 4-3=1
    4 0 4-0=4

    也就是说在没有多出,即current.length%4的值为0的时候会出现问题

    看到很多人用v-for结合v-if进行解决,然而官方文档是这样解释的: 当 v-ifv-for 一起使用时,v-for 具有比 v-if 更高的优先级。

    我的解决方式如下,

             <div class="ItemContainer" v-for="indexa in ((4-current.length%4)===4?[]:4-current.length%4)" :key="indexa+'a'"></div>
    

    既然在最后一个会出现问题,那么就使用一个三目运算进行判定,当计算出来的值为4的时候就是用一个空数组来代替,即没有元素,其他情况下正常输出即可

    完成收工!!

  • 相关阅读:
    【AtCoder】AtCoder Grand Contest 014 解题报告
    【CF603E】Pastoral Oddities(CDQ分治)
    【洛谷4654】[CEOI2017] Mousetrap(DP+二分)
    【洛谷4800】[CEOI2015 Day2] 核能国度(差分细节题)
    【CF626G】Raffles(贪心)
    【CF578E】Walking!(贪心)
    【AtCoder】AtCoder Grand Contest 015 解题报告
    【CF582E】Boolean Function(动态规划+FWT)
    【CF576E】Painting Edges(线段树分治+并查集)
    【CF576D】Flights for Regular Customers(矩乘套路题)
  • 原文地址:https://www.cnblogs.com/axu1997/p/12821552.html
Copyright © 2011-2022 走看看