【问题标题】:CSS Grid - Transitioning from 1 row, 3 col to 3 row, 1 colCSS Grid - 从 1 行 3 列过渡到 3 行 1 列
【发布时间】:2019-09-23 17:53:20
【问题描述】:

我正在探索 CSS Grid,看看它是否可以完全取代我的特定用例对响应式 CSS 媒体查询的需求。我有以下网格容器:

.gridContainer {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    padding: 0px 15px;
    margin: 0 auto;
    grid-row-gap: 20px;
}

网格容器包含三个项目,这些项目最初会在较大的屏幕尺寸上形成一行和三列:

当我减小视口宽度以使三列每列低于 250 像素时,我希望网格布局与三行一列的布局对齐:

当您减小视口宽度时,由于选择了自动放置算法,当前有一个临时布局,其中第三个项目自动换行:

我想绕过这种包装,只支持最初的一行三列布局和最终的三行一列布局。仅使用 CSS Grid 而不使用媒体查询是否可以做到这一点?

【问题讨论】:

标签: css css-grid grid-layout


【解决方案1】:

一旦达到最小宽度,您就可以使用媒体查询并将容器变成网格:(由于您提供的信息太少,因此采用了代码选项)

这个想法的基本例子

div {
  padding: 1em;
  margin: 1em;
  border: dotted tomato;
}

@media (min-width: 780px) {
  body {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    padding: 0px 15px;
    margin: 0 auto;
    grid-row-gap: 20px;
  }
}
<div>lorem</div>
<div>lorem</div>
<div>lorem</div>

您可以在全页模式下播放 sn-p 并调整浏览器大小以检查行为。

【讨论】:

  • 感谢您的回答。这实际上是我目前已经实现的,但我更想知道是否可以在不使用媒体查询的情况下实现相同的功能。我编辑了帖子的结尾以使其更加清晰。
  • 你真的不能,低于 250 像素,你的网格单元不会缩小,但也不会扩大,除非内容会(图像,很长的单词,宽度设置为超过 250 像素) , ..) mediaquerie 是这里唯一可以观察窗口大小并切换到你的其他 css 规则的东西。
【解决方案2】:

自动调整或自动填充功能以最大列数填充可用空间。

您可以借助媒体表达式解决问题,以所需的分辨率更改列数。

结果

.grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(250px, 1fr));
  padding: 0px 15px;
  margin: 0 auto;
  grid-row-gap: 20px;
  list-style: none;
}

.item {
  border: 1px dashed red;
}

@media (max-width: 800px) {
  .grid {
    grid-template-columns: 1fr;
  }
}
<ul class="grid">
  <li class="item">
    <h3>Lorem, ipsum dolor.</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Iusto nihil neque quas corrupti eaque in iure totam reiciendis praesentium. Sapiente impedit magni consequatur modi error eaque vel tempore consequuntur saepe.</p>
  </li>
  <li class="item">
    <h3>Lorem, ipsum dolor.</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Iusto nihil neque quas corrupti eaque in iure totam reiciendis praesentium. Sapiente impedit magni consequatur modi error eaque vel tempore consequuntur saepe.</p>
  </li>
  <li class="item">
    <h3>Lorem, ipsum dolor.</h3>
    <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Iusto nihil neque quas corrupti eaque in iure totam reiciendis praesentium. Sapiente impedit magni consequatur modi error eaque vel tempore consequuntur saepe.</p>
  </li>
</ul>

CodePen 上的代码相同

【讨论】:

  • 感谢您的回答。这实际上是我目前已经实现的,但我更想知道是否可以在不使用媒体查询的情况下实现相同的功能。我编辑了帖子的结尾以更清楚。
猜你喜欢
  • 2021-12-22
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多