【发布时间】:2020-06-09 12:24:44
【问题描述】:
是否有可能有一个带有自动流的 CSS 网格,以最大限度地减少换行后的列数?怎么样?
我有一个包含 6 个自动放置项目的网格。一旦不是所有 6 个都适合一行,我希望有 3 列和 2 行,而不是 5 列和 1 行,第二个元素上只有一个元素。
如果可能,我想避免媒体查询。
我想做的事情的直观表示:
1) 如果所有 6 个项目都放在一行中,则将它们显示在一行中。
| OOO OOO OOO OOO OOO OOO |
| O1O O2O O3O O4O O5O O6O |
| OOO OOO OOO OOO OOO OOO |
2) 如果一行中的元素少于 6 个,则将它们显示为 2 行,每行 3 个项目。
| OOO OOO OOO |
| O1O O2O O3O |
| OOO OOO OOO |
| |
| OOO OOO OOO |
| O4O O5O O6O |
| OOO OOO OOO |
3) 如果一行中的元素少于 3 个,则将它们显示为 3 行,每行 2 项。
| OOO OOO |
| O1O O2O |
| OOO OOO |
| |
| OOO OOO |
| O3O O4O |
| OOO OOO |
| |
| OOO OOO |
| O5O O6O |
| OOO OOO |
这是我到目前为止所得到的。减小宽度直到最后一列换行,此时我希望有 3 列,每列 3 个项目,而不是 5 列和 1 列。
.grid {
padding: 10px;
border: 2px solid #444;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
gap: 10px;
justify-content: space-evenly;
}
.item {
height: 50px;
background: #5a5a;
display: flex;
align-items: center;
justify-content: center;
font-size: 2em;
}
<div class="grid">
<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>
【问题讨论】:
-
我认为(不完全确定)您可能需要 flexbox 而不是 grid。
-
@WoodrowBarlow 你将如何使用 flexbox 来实现它,使其适用于 6、3 和 2 列?使用 flexbox 还存在保持列对齐和宽度相同的问题。
-
你必须问为什么这些列会符合任意数字。他们没有理由从 6 到 3 到 2。为什么容器会这样调整?为什么不是 6 比 4 比 1?这就是存在媒体查询的原因。
-
因为每行有 3 列将被填满。我发布了这个问题,以确定是否有一种我不知道的方法在包装后填充每一行。媒体查询在我的情况下没有用,因为这种样式将进入一个可以独立于视口调整大小的区域。
标签: html css flexbox responsive css-grid