【问题标题】:CSS Grid to have minimum number of columns possible with auto flow after wrappingCSS Grid在换行后具有自动流可能的最小列数
【发布时间】: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


【解决方案1】:

编辑:请注意,我在 OP 将他们的代码添加到问题之前写了答案。但是,我仍然认为需要@media 查询来解决这个问题,与显示div 元素的方法无关。


原答案:

我在下面使用br 标记和@media 查询进行了演示。

运行 sn-p 然后按“整页”进行测试:

.grid-box {
  display: inline-block;
  width: 200px;
  height: 150px;
  background-color: blue;
  margin: 2px;
}

.row3 {
  display: none;
}

@media (max-width: 1260px) {
  .row3 {
    display: block;
  }
}

@media (max-width: 636px) {
  .row3 {
    display: none;
  }
}
<div class="grid-box"></div>
<div class="grid-box"></div>
<div class="grid-box"></div>
<br class="row3">
<div class="grid-box"></div>
<div class="grid-box"></div>
<div class="grid-box"></div>

【讨论】:

  • 我想避免媒体查询,因为我想制作一个可重用的组件,可以在带有侧边栏的地方使用。媒体查询使它变得复杂。
猜你喜欢
  • 2020-01-26
  • 2021-02-20
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多