【问题标题】:Auto spread evenly columns with css grid使用 CSS 网格自动均匀分布列
【发布时间】:2019-07-21 16:12:48
【问题描述】:

如何在列中均匀分布 x 个元素。 例如,如果我有这个代码

div {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
  grid-gap: 0.5rem;
}

span {
  background: red;
  height: 50px;
}
<div>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
</div>

我希望它均匀地贴合。所以它不应该在第一行显示 3 个项目,在第二行显示 1 个项目。相反,它应该在第一个上显示 2 个项目,在第二个上显示 2 个项目。只要它可以将它均匀地分布在每一行上,它就应该这样做。

我做了一个几乎可以做到的 sn-p。问题是当屏幕真的很小时,第一个显示 3,第二个显示 1。请注意,现在我只有 4 个项目,但它应该可以动态处理任意数量的项目。

【问题讨论】:

  • 您可以使用媒体查询,auto-fit 规则不会让您指定最小列数;因此对于较小的屏幕,您可以设置固定数量的列

标签: css css-grid


【解决方案1】:

我认为一个好的和简单的选择是明确小屏幕的列数; auto-fit 规则不允许您指定最小或最大列数,只会在有可用空间时调整它们。

div {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
  grid-gap: 0.5rem;
}

span {
  background: red;
  height: 50px;
}

@media (max-width: 500px) {
  div {
    grid-template-columns: repeat(2, minmax(100px, 1fr));
  }
}
<div>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
</div>

【讨论】:

  • 问题与屏幕大小无关,不是真的。如果我将 100px 更改为 500px,这个问题仍然会发生,但屏幕尺寸不同。
  • 那么这个问题需要在你期望的布局中解决;如果你知道你只能有4列,那么指定,如果没有,并且你想自动填充它们,那么你需要处理特殊情况或限制列的大小以便保持在您的范围内;不幸的是,除非您可以通过 JavaScript 限制布局,否则您将不得不选择一种方法或其他方法
  • @Rane 这可能会对您有所帮助,在这种情况下,用户想要最大数量的列,也许它会为您指明正确的方向:stackoverflow.com/questions/54907270/…
猜你喜欢
  • 2020-03-22
  • 2020-08-06
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多