【发布时间】:2020-04-16 07:12:19
【问题描述】:
我想找到一种方法,让单个容器中的元素换行到与前一行相反方向的新行,就像一条蛇在自己身上弯曲一样。我无法使用 flexbox 以及 flex-direction 和 flex-wrap 属性的任何组合来实现此结果。
flexbox 结果与期望结果的图像比较:
这是一个 sn-p 显示 flexbox 结果与期望结果(伪造):
body {
font: 400 14px 'Arial', sans-serif;
}
.title {
font-size: 1em;
padding: 20px 0;
}
.title:first-child {
padding: 0 0 20px;
}
.flex-container, .fake-container, .fake-row {
width: 500px;
background: orange;
display: flex;
}
.flex-container {
flex-flow: row wrap; /* any combination of row/reverse & wrap/reverse */
}
.item {
display: inline-block;
background: purple;
width: 80px;
max-width: 80px;
height: 80px;
margin: 10px;
line-height: 80px;
color: white;
font-weight: bold;
font-size: 2em;
text-align: center;
}
.fake-container {
flex-flow: column nowrap;
}
.fake-row {
flex-flow: row wrap;
height: 100px;
}
.fake-row:nth-child(2) {
flex-flow: row-reverse wrap;
}
<div class="title">Flexbox result:</div>
<div class="flex-container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
</div>
<div class="title">Desired result (faked):</div>
<div class="fake-container">
<div class="fake-row">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
<div class="fake-row">
<div class="item">6</div>
<div class="item">7</div>
</div>
</div>
尽管我很想找到一个纯 CSS 解决方案来实现这种“蛇形包装”,但我开始怀疑它的可能性。我确信可以使用 javascript 解决方案,但不确定如何在不使事情过于复杂的情况下继续创建一个。
有什么简单的解决方案吗?感谢您的宝贵时间。
【问题讨论】:
-
你不能用 flexbox 做到这一点。 Flexbox 只是一维的。您可以换行到下一行,但它与上一行相同。
-
欢迎来到 SO @Vern,我不知道真正的答案,但请通过 css grids 试试这个