单排网格,高度为1fr,未在Chrome中填充高度

问题描述 投票:5回答:1

我在Flexbox列中有一个CSS Grid,网格有flex-grow: 1

在Chrome中,网格会扩展以填充可用空间,但其内容不会,即使网格上有align-content: stretch。在Firefox和Edge中,内容会根据需要扩展以填充网格的高度。

Here's a pen that reproduces the problem,以及它在不同浏览器中的外观图像。这是Chrome的错误,如果是这样,有人可以建议一个简单的解决方法吗?

Pen in chrome, showing the bug

火狐

Pen in firefox, showing desired behaviour

边缘

Pen in edge, showing desired behaviour

#wrapper {
  display: flex;
  flex-direction: column;
  height: 15rem;
  background-color: #aaa;
}

#grid {
  flex-grow: 1;
  display: grid;
  background-color: #ccf;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr;
  align-content: stretch; /* "end" correctly puts the row to the bottom */
}

#left {
  background-color: #fcc;
}

#right {
  background-color: #cfc;
}
<div id="wrapper">
  <div id="top">not in grid</div>

  <div id="grid">
    <div id="left">left</div>
    <div id="right">right</div>
  </div>
</div>
css css3 google-chrome flexbox css-grid
1个回答
6
投票

这是Chrome的错误,如果是这样,有人可以建议一个简单的解决方法吗?

它看起来像Chrome中的一个错误。但我不能肯定地说。

这是发生了什么:

  • 您已将弹性项目网格容器设置为使用flex-grow: 1消耗所有可用高度
  • 因为你只定义了flex-grow属性,所以另外两个flexibility properties - flex-shrinkflex-basis - 保持默认值。
  • flex-shrink的默认值是1,与此问题无关。
  • flex-basis的默认值是auto,是问题的根源。
  • 如果您将flex-basis: 0添加到代码中,该项目也会在Chrome中占据全部高度。

revised codepen

#wrapper {
  display: flex;
  flex-direction: column;
  height: 15rem;
  background-color: #aaa;
}

#grid {
  /* flex-grow: 1; */
  flex: 1; /* fg:1, fs:1, fb:0 */
  display: grid;
  background-color: #ccf;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr;
}

#left  { background-color: #fcc; }
#right { background-color: #cfc; }
<div id="wrapper">
  <div id="top">not in grid</div>
  <div id="grid">
    <div id="left">left</div>
    <div id="right">right</div>
  </div>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.