核心代码:

    1. <div class="container">
    2. <div>1</div>
    3. <div>2</div>
    4. <div>3</div>
    5. <div>4</div>
    6. <div>5</div>
    7. <div>6</div>
    8. <div class="last">8</div>
    9. </div>
    1. .container {
    2. margin: 0 auto;
    3. width: 420px;
    4. height: 400px;
    5. display: flex;
    6. flex-wrap: wrap;
    7. justify-content: space-between;
    8. align-items: center;
    9. background: greenyellow;
    10. }
    11. .container div {
    12. border: 1px solid darkred;
    13. width: 100px;
    14. height: 200px;
    15. font-size: 30px;
    16. flex-shrink: 0;
    17. box-sizing: border-box;
    18. background: rosybrown;
    19. }
    20. .container::after {
    21. // 这里的100px,是一个整块的宽度
    22. flex: 0 0 100px;
    23. content: '';
    24. }

    效果图:
    屏幕快照 2019-06-28 下午5.32.33.png

    思路:

    • 有两种解法:
      1. 对::after设置flex:1;使其扩充整个剩下的领域,这样最后一行就会变成flex-start的布局,5/6/7三个方块之间不会有任何的间距,这不是我想要的。屏幕快照 2019-06-28 下午5.36.10.png
      2. flex-basis属性设置为固定的控件,这样一来::after就会在主轴上占据固定的空间宽度,相当于多了一个看不到的占位符,并且也不会破坏整体的space-between布局。
      • 但是这样有一个坏处,就是flex-basis的值要写死,并且不能参与进间隔的计算,也就是,只适用于最后一行缺一个的情况。
      • 如果遇到的是最后一行缺的个数不一定的情况的话,还是使用flex: 1;然后nth-last-child(1)这样的方式手动设置边距比较好。但是这也意味着整体不能使用space-between了