网格:力单元格宽度与第二行无关

Grid : force cell width of second row independant

提问人:usualuser 提问时间:11/12/2023 最后编辑:Paulie_Dusualuser 更新时间:11/13/2023 访问量:33

问:

我有这段代码,它显示一行包含多列。 当屏幕的宽度低于限制时(使用媒体查询),我希望某些单元格进入第二行,但宽度独立于第一行。

[HTML全文]

<div class="grid">
    <div class="c1">1</div>
    <div class="c2">2</div>
    <div class="c3">3</div>
    <div class="c4">4</div>
    <div class="c5">5</div>
    <div class="c6">6</div>
    <div class="c7">7</div>
</div>

CSS的

.grid {display: grid; width: 100%; grid-template-columns: 50px auto 70px 250px 60px 60px 60px;}
@media screen and (max-width: 1070px) {
.grid {grid-template-columns: 50px auto 70px 250px;}
.grid .c5 {grid-column-start: 1;}
}

结果大屏幕:

+-----------------------------------+
| 1 |   2   | 3 |   4   | 5 | 6 | 7 |
+-----------------------------------+

结果屏幕< 1070px(不是我想要的): 我在单元格 5、6 和 7 中有一个换行符,但它们的宽度取决于第一行上方列的宽度。

+-----------------------------------+
| 1 |       2      | 3 |      4     |
+-----------------------------------+
| 5 |       6      | 7 |
+-----------------------------------+

例如,从这个 HTML 代码中,是否可以得到这个结果,例如第二行列的宽度为 33%?

+-----------------------------------+
| 1 |       2      | 3 |      4     |
+-----------------------------------+
|      5    |      6     |    7     |
+-----------------------------------+
HTML 弹性框 CSS-网格

评论

0赞 Brett Donald 11/12/2023
只需拥有更多列,并让单元格跨越多个列即可。在第一行中,它们可能分别跨越两列或三列,在第二行中,它们可能分别跨越五列或六列。
1赞 Paulie_D 11/12/2023
所需的结果不是网格,因此 CSS-Grid 在这里不合适。我怀疑 flexbox 会让你最接近,但即使这样也无法检测到何时发生断行或溢出。因此,在 flexbox 或 CSS-Grid 中定位特定行是不可能的。

答:

2赞 Paulie_D 11/13/2023 #1

您需要将所需的元素包装在一个单独的 div 中,在较大的尺寸下,该 div 用 .display: contents

在较低的宽度处,我们将包装器移动到第二行,使其全宽,然后应用 flexbox 并使内容宽度相等。

.wrap {
  display: contents;
}

[class^="c"] {
  border: 1px solid green;
  text-align: center;
}

.grid {
  display: grid;
  grid-template-columns: 50px auto 70px 250px repeat(3, 60px);
}

@media screen and (max-width: 1070px) {
  .grid {
    grid-template-columns: 50px auto 70px 250px;
  }
  .grid .wrap {
    grid-column: 1 / -1;
    display: flex;
  }
  .wrap div {
    flex: 1;
  }
}
<div class="grid">
  <div class="c1">1</div>
  <div class="c2">Lorem ipsum dolor sit amet consectetur adipisicing elit.</div>
  <div class="c3">3</div>
  <div class="c4">4</div>
  <div class="wrap">
    <div class="c5">5</div>
    <div class="c6">6</div>
    <div class="c7">7</div>
  </div>
</div>

评论

0赞 usualuser 11/13/2023
谢谢,在我看来就是这样,这个 HTML 代码是不可能的。所以我要放一个子容器。