css – 如何获取不同长度的网格项目?

使用repeat()和自动调整/自动填充功能,当列或行具有定义的长度模式时,很容易获取网格项.

在下面的示例中,所有列的最小宽度为100px,最大宽度为1fr.

jsFiddle demo

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

#grid > div {
  background-color: #ccddaa;
  padding: 10px;
}
<div id="grid">
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

但是当轨道没有长度模式(即长度随机变化)时,网格物品如何包裹?

在下面的示例中,第一列的宽度为60%.第二列是最小/最大250px / 1fr.如何让第二列包装在较小的屏幕上?

jsFiddle demo

#grid {
  display: grid;
  grid-template-columns: 60% minmax(250px,1fr);
  grid-gap: 1em;
}

#grid > div {
  background-color: #ccddaa;
  padding: 10px;
}
<div id="grid">
  <div></div>
  <div></div>
</div>

我知道flexBox和媒体查询提供了解决方案,但我想知道Grid Layout是否可以做到这一点.我搜索spec,但没有找到任何东西.也许我错过了这个部分.谢谢你的帮助.

解决方法

网格项实际上不会换行.您看到网格项“包装”到下一行的原因实际上是因为显式网格被更改以保持在minmax()规定的约束范围内. repeat()生成的列数与网格容器的使用宽度成比例,网格项根据列数逐个布局,并根据需要创建新行.

因此,当有两列时,无法强制第二个网格项进行换行,并且显式网格中有空间将该网格项插入第二列.此外,即使您可以告诉第二个网格项“换行”,也意味着将它放在第一列的新行中,因此它的布局将由第一列而不是第二列控制.当然,根据第二列的大小仍将完全打破网格布局.

如果打算通过将元素包装到新行来适应较小的屏幕,则应使用flex布局,而不是网格布局.网格布局不适用于此目的.

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效