【问题标题】:unexpected behavior with grid-template-rows and 1fr on chromechrome 上的 grid-template-rows 和 1fr 出现意外行为
【发布时间】:2021-08-06 22:41:21
【问题描述】:

我正在尝试在 flex 列内构建一个包含 2 行的网格。弹性容器具有填充窗口的最小高度。网格的第一行应该填满可用空间,所以我在想 fr 单位。简化版本可能如下所示:

.container {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}
.grid {
  flex-grow: 1;
  background-color: red;
  padding: 1rem;
  grid-gap: 1rem;
  display: grid;
  grid-template-rows: 1fr auto;
}

.grid > * {
  background-color: white;
}
<div class="container">
  <h1>some title</h1>
  <div class="grid">
    <div>line 1</div>
    <div>line 2</div>
  </div>
</div>

这与 Firefox 完美配合:

但不是 chrome:

我错过了什么?

【问题讨论】:

    标签: css flexbox css-grid


    【解决方案1】:

    网格容器在 Chrome 和 Firefox 中以不同方式解释 flex 父级上的 min-height: 100vh

    正如您所指出的,在 Firefox 中,一切都按您的预期工作。但是在 Chrome 中,min-height 被有效地忽略了(即使flex-grow: 1 作用于同一个元素)。

    如果您切换到 height: 100vh,您将看到 1fr 在 Chrome 中也能正常工作。

    我必须进行更多研究才能告诉您这是否是错误。

    考虑将网格嵌套在另一个网格中,而不是 flex、容器。

    .container {
      display: grid;
      min-height: 100vh;
      grid-template-rows: min-content 1fr;
    }
    
    .grid {
      background-color: red;
      padding: 1rem;
      grid-gap: 1rem;
      display: grid;
      grid-template-rows: 1fr auto;
    }
    
    .grid>* {
      background-color: white;
    }
    <div class="container">
      <h1>some title</h1>
      <div class="grid">
        <div>line 1</div>
        <div>line 2</div>
      </div>
    </div>

    jsFiddle demo

    【讨论】:

    • 确实,将网格嵌套在网格而不是弹性容器内也解决了这个问题。我也会做一些研究来确定这是否是一个错误。如果你发现了什么,请告诉我。谢谢 :)
    • @rgmt 我也投票给了一个错误(就像这里一样:stackoverflow.com/a/67332926/8620333),我得到确认网格布局有问题并且正在重新设计:stackoverflow.com/a/67011770/8620333
    猜你喜欢
    • 2018-08-15
    • 2020-09-18
    • 2021-01-03
    • 1970-01-01
    • 2020-10-01
    • 2020-05-21
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多