核心代码:
<div class="container"><div>1</div><div>2</div><div>3</div><div>4</div><div>5</div><div>6</div><div class="last">8</div></div>
.container {margin: 0 auto;width: 420px;height: 400px;display: flex;flex-wrap: wrap;justify-content: space-between;align-items: center;background: greenyellow;}.container div {border: 1px solid darkred;width: 100px;height: 200px;font-size: 30px;flex-shrink: 0;box-sizing: border-box;background: rosybrown;}.container::after {// 这里的100px,是一个整块的宽度flex: 0 0 100px;content: '';}
效果图:
思路:
- 有两种解法:
- 对::after设置
flex:1;使其扩充整个剩下的领域,这样最后一行就会变成flex-start的布局,5/6/7三个方块之间不会有任何的间距,这不是我想要的。
- flex-basis属性设置为固定的控件,这样一来::after就会在主轴上占据固定的空间宽度,相当于多了一个看不到的占位符,并且也不会破坏整体的space-between布局。
- 但是这样有一个坏处,就是flex-basis的值要写死,并且不能参与进间隔的计算,也就是,只适用于最后一行缺一个的情况。
- 如果遇到的是最后一行缺的个数不一定的情况的话,还是使用flex: 1;然后nth-last-child(1)这样的方式手动设置边距比较好。但是这也意味着整体不能使用space-between了
- 对::after设置
