【问题标题】:CSS Grid 'responsive' column to grow or shrink on available space (no width fixed) [duplicate]CSS Grid“响应”列在可用空间上增长或缩小(没有固定宽度)[重复]
【发布时间】:2020-07-15 00:20:56
【问题描述】:

我将有一个有时会有 1、2、3 或 4 列的网格。

这里是 2 列的示例。

* {box-sizing: border-box;}

.wrapper {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
}

.wrapper > div {
    border: 2px solid #ffa94d;
    border-radius: 5px;
    background-color: #ffd8a8;
    padding: 1em;
    color: #d9480f;

}
.wrapper {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 10px;
  grid-auto-rows: 50px 100px;
}
<div class="wrapper">
   <div>One</div>
   <div>Two</div>
   <div>Three</div>
   <div>Four</div>
   <div>Five</div>
   <div>Six</div>
   <div>Seven</div>
   <div>Eight</div>
    <div>Nine</div>
</div>

https://codepen.io/alfaex/pen/QWbPRxw

在这种情况下,我希望第九项跨越到第二列。

我找不到对第九个项目说“只是增长”的属性

当 3 列的媒体查询启动并更改 grid-template-columns: 1fr 1fr;grid-template-columns: 1fr 1fr 1fr; 它应该再次占据 1fr

1fr 1fr 1fr 1fr 共享与1fr 1fr 相同的问题

【问题讨论】:

  • 这就是 flexbox 的用途。
  • 那么用css网格不可能做到这一点?
  • 是的。没有针对最后一行的项目。 CSS 也无法检测某项何时是该行中的唯一项。

标签: css css-grid


【解决方案1】:

考虑 last-child 选择器,当它是行中唯一的一个时,使其跨越所有行:

.wrapper :last-child:nth-child(odd) {
  grid-column: 1 / -1;
}

当您有两个以上的列时,您可以执行相同的逻辑。

* {box-sizing: border-box;}

.wrapper {
    border: 2px solid #f76707;
    border-radius: 5px;
    background-color: #fff4e6;
}

.wrapper > div {
    border: 2px solid #ffa94d;
    border-radius: 5px;
    background-color: #ffd8a8;
    padding: 1em;
    color: #d9480f;

}
.wrapper {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 10px;
}


.three {
  grid-template-columns: 1fr 1fr 1fr;
}
.four {
  grid-template-columns: 1fr 1fr 1fr 1fr;
}

.wrapper.four :last-child:nth-child(4n + 1),
.wrapper.two :last-child:nth-child(odd){
  grid-column:1/-1;
}
<div class="wrapper two">
   <div>One</div>
   <div>Two</div>
   <div>Three</div>
   <div>Four</div>
   <div>Five</div>
   <div>Six</div>
   <div>Seven</div>
   <div>Eight</div>
    <div>Nine</div>
</div>

<div class="wrapper three">
   <div>One</div>
   <div>Two</div>
   <div>Three</div>
   <div>Four</div>
   <div>Five</div>
   <div>Six</div>
   <div>Seven</div>
   <div>Eight</div>
    <div>Nine</div>
</div>

<div class="wrapper four">
   <div>One</div>
   <div>Two</div>
   <div>Three</div>
   <div>Four</div>
   <div>Five</div>
   <div>Six</div>
   <div>Seven</div>
   <div>Eight</div>
    <div>Nine</div>
</div>

【讨论】:

  • 那么,没有通用属性可以做到这一点吗?每次我需要使用grid-column:span 4 时,我是否需要做一些数学运算(数学运算,因为我将在 sass 中使用)
  • @MateusSilva 您可以使用grid-column: 1 / -1;(检查更新)但是是的,您需要确定应用属性的元素,除非您考虑使用 flexbox,否则没有通用规则可以为您执行此操作
猜你喜欢
  • 2019-06-02
  • 2018-10-08
  • 2020-10-11
  • 2017-12-12
  • 1970-01-01
  • 2016-01-19
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多