chrome 上网格模板行和 1fr 的意外行为

时间:2021-05-17 16:23:44

标签: css flexbox css-grid

我正在尝试在 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 中运行良好:

test on firefox

但不适用于 chrome:

test on chrome

我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

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

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

我必须进一步研究才能告诉您这是否是错误。

考虑将网格嵌套在另一个网格中,而不是 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