我有一个用例,感觉像Flexbox CSS应该能够处理,但我无法使其正常工作。我不确定此用例是否超出了Flexbox可以处理的内容,因此我正在寻找建议。(我写了javaScript来完成我需要的事情,但是我正在考虑这一点,以查看纯CSS实现是否可行。(
我有一个容器Div,其中包含1个或更多项目。每个包含的项目都有固定宽度和高度。容器div的高度固定,但仅应占用其物品所需的宽度。这些项目应在DIV内从上到下放置,并在"填充"上一列时应将其包装到新的列中。
这是我用来测试的一些示例HTML:
<div class="my-container">
<div class="my-item">Item 1</div>
<div class="my-item">Item 2</div>
<div class="my-item">Item 3</div>
<div class="my-item">Item 4</div>
<div class="my-item">Item 5</div>
<div class="my-item">Item 6</div>
<div class="my-item">Item 7</div>
<div class="my-item">Item 8</div>
<div class="my-item">Item 9</div>
<div class="my-item">Item 10</div>
<div class="my-item">Item 11</div>
<div class="my-item">Item 12</div>
<div class="my-item">Item 13</div>
<div class="my-item">Item 14</div>
<div class="my-item">Item 15</div>
<div class="my-item">Item 16</div>
<div class="my-item">Item 17</div>
<div class="my-item">Item 18</div>
<div class="my-item">Item 19</div>
<div class="my-item">Item 20</div>
<div class="my-item">Item 21</div>
<div class="my-item">Item 22</div>
<div class="my-item">Item 23</div>
<div class="my-item">Item 24</div>
<div class="my-item">Item 25</div>
</div>
这是我用来测试的CSS:
.my-container {
display: flex;
flex-direction: column;
flex-wrap: wrap;
background-color: rgb(33, 150, 243);
padding: 15px;
height: 600px;
}
.my-item {
width: 250px;
height: 25px;
color: white;
padding: 10px;
flex: 0 0 auto;
}
请注意,宽度和高度的值在这里是任意的,可以更改。但是这些项目将始终具有固定宽度/高度,并且容器将始终具有固定的高度。
使用上面的CSS,这些项目可以正确地包装到新的列,但是容器div填充了视口的整个宽度。我需要容器div仅足够宽即可包含其物品。
如果我将my-container的显示属性从" flex"更改为" inline-flex",则容器的宽度会缩小,但不足以显示比第一列更大,随后的列未完全可见。
这可能是捕获22个情况之一。这些项目的尺寸固定,但需要根据容器的高度流入列。容器需要从其项目流入的列数中占据宽度。
我还研究了CSS电网,以查看这是否可能是可能的,但听起来您必须事先知道列的数量才能工作,我不知道。列的数量取决于项目的大小和容器的高度。
Flexbox CSS可以解决此问题吗?如果没有,还有其他基于CSS的方法吗?我已经有一个可以执行此操作的JavaScript实现,如果这是可行的,我只想拥有纯CSS实现。
您可以使用Grid的自动填充属性,因此您不需要知道列数。
.my-container {
display: grid;
grid-auto-flow: column;
grid-template-rows: repeat(auto-fill, minmax(45px, 1fr));
background-color: rgb(33, 150, 243);
padding: 15px;
height: 600px;
width: fit-content;
}
.my-item {
width: 250px;
height: 25px;
color: white;
padding: 10px;
flex: 0 0 auto;
}
jsfiddle演示:https://jsfiddle.net/92Sak0zc/6/