首页 > 解决方案 > CSS Grid - 响应式 - 多个 3 列行到 2 列行

问题描述

我正在创建一个包含多行和 3 列网格的页面,但在平板电脑中,更改为 2 列网格和移动 1 列网格。

在平板电脑中,当创建 2 列网格时,它会在最后创建一个空列。

是否可以连接两行,所以第二行占据第一行的空位?

或者唯一的机会是将列组织在一行上?

<div class="block-container grid-3-cols_wrapper">
   <!-- Row 1 -->
   <div class="has-3-columns">
      <!-- Col 1 -->
      <div class="block-column">
         <div><img src="..." alt=""></div>
      </div>

      <!-- Col 2 -->
      <div class="block-column">
         <div><img src="..." alt=""></div>
      </div>

      <!-- Col 3 -->
      <div class="block-column">
         <div><img src="..." alt=""></div>
      </div>

   <!-- Row 2 -->
   <div class="has-3-columns">
      <!-- Col 1 -->
      <div class="block-column">
         <div><img src="..." alt=""></div>
      </div>

      <!-- Col 2 -->
      <div class="block-column">
         <div><img src="..." alt=""></div>
      </div>

      <!-- Col 3 -->
      <div class="block-column">
         <div><img src="..." alt=""></div>
      </div>
</div>

标签: csscss-grid

解决方案


这应该有望使您朝着正确的方向前进。

我已经做到了,CSS所以它可以移动。所以第一个媒体查询是针对平板电脑的,第二个是针对台式机的,第二个是width: 100%针对移动设备的,所以显然会显示一列。您可以修改它以适合您的需要。玩弄它,有任何问题评论,我会看看:)

FlexBox 方法

flex-direction flex-direction CSS 属性设置 flex 项目如何放置在定义主轴和方向(正常或反向)的 flex 容器中。看看这里的例子

flex-flow flex-flow CSS 属性是 flex-direction 和 flex-wrap 属性的简写属性。在这里阅读

justify-content CSS justify-content 属性定义了浏览器如何沿弹性容器的主轴和网格容器的内联轴在内容项之间和周围分配空间。在这里阅读

.grid-container {
  display: flex;
  flex-direction: row;
  flex-flow: row wrap;
  justify-content: space-between;
  width: 100%;
}

.grid-item {
  display: flex;
  background-color: orange;
  width: calc(100% - 10px);
  margin: 5px
}

@media (min-width: 720px) {
  .grid-item {
    width: calc(33.333% - 10px);
  }
}

@media (min-width: 1020px) {
  .grid-item {
    width: calc(25% - 10px);
  }
}
<div class='grid-container'>
  <div class='grid-item'>item 1</div>
  <div class='grid-item'>item 2</div>
  <div class='grid-item'>item 3</div>
  <div class='grid-item'>item 4</div>
  <div class='grid-item'>item 5</div>
  <div class='grid-item'>item 6</div>
</div>

请记住,如果您更改边距值以表示20px您还必须在width执行此操作时更改该值:

width: calc(grid-item-desired-width% - margin);

我真的建议阅读上面的链接,因为它们都有交互式演示,这将为您提供这些 flexbox 属性如何工作的直观示例。我还建议只使用 flex-box 并尝试不同的值以查看它们在您的网格上的作用。这是学习它并将其牢牢记住的最好方法。希望以上内容对您有所帮助。

CSS 网格方法

另一种方法是使用CSS Grid. 不确定你想要什么方式,但我个人会选择 flexbox。如果你想要它下面是 CSS 网格方法

.grid-container {
  display: grid;
  grid-template-columns: auto;
  padding: 10px;
  grid-gap: 10px 10px;
}

.grid-item {
  border: 1px solid black;
  padding: 20px;
  font-size: 30px;
  text-align: center;
}

@media (min-width: 720px) {
  .grid-container {
    grid-template-columns: auto auto auto;
  }
}

@media (min-width: 1020px) {
  .grid-container {
    grid-template-columns: auto auto auto auto;
  }
}
<div class='grid-container'>
  <div class='grid-item'>item 1</div>
  <div class='grid-item'>item 2</div>
  <div class='grid-item'>item 3</div>
  <div class='grid-item'>item 4</div>
  <div class='grid-item'>item 5</div>
  <div class='grid-item'>item 6</div>
</div>


推荐阅读