Flex子元素不展开到完整高度

24

我的页面有一个动态页脚,我希望它上面的内容能够自适应缩放以达到页脚的顶部,这没问题,但是我遇到了一个问题:

#snippet-container {
  height: 300px;
  width: 200px;
}

#page {
  display: flex;
  flex-flow: column;
  height: 100%;
}

#content {
  flex: 1 1 auto;
  background: blue;
}

#content .test {
  width: 100%;
  height: 100%;
  background: yellow;
  border: 2px solid red;
}

#footer {
  flex: 0 1 10vh;
  background: black;
}
<div id="snippet-container">
  <div id="page">
    <div id="content">
      <div class="test"></div>
    </div>
    <div id="footer"></div>
  </div>
</div>

我期望.test元素填充#content元素,因此使用了100%/100%的宽度/高度,但实际未能实现。
在代码片段中,您可以看到这一点反映在我为.test元素设置的红色边框上。

你是想把所有东西都填成黄色而不是红色,对吗? - Naga Sai A
http://codepen.io/pen/ - Naga Sai A
尝试将 flex-fow 替换为 flex-direction。那可能是问题所在,虽然我不确定。 - agdhruv
2个回答

25

问题

问题在于您的 #page 弹性容器未能“达到”.test元素,因为.test不是子元素,而是弹性项目的后代。

弹性容器的内容由零个或多个弹性项目组成:弹性容器的每个子元素都变成一个弹性项目。

每个弹性项目都受到弹性容器的影响,但是弹性项目的后代则不会。

解决方案

您需要将 display: flex 添加到您的 #content 中。

JSFiddle

代码片段

#snippet-container {
  height: 300px;
  width: 200px;
}
#page {
  display: flex;
  flex-flow: column;
  height: 100%;
}
#content {
  display: flex;
  height: 100%;
  background: blue;
}
#content .test {
  width: 100%;
  background: yellow;
  border: 2px solid red;
}
#footer {
  flex: 0 1 10vh;
  background: black;
}
<div id="snippet-container">
  <div id="page">
    <div id="content">
      <div class="test"></div>
    </div>
    <div id="footer"></div>
  </div>
</div>


这个解决方案仅适用于直接的 flex 子元素,但如果您需要 100% 的项目包含在更多的 div 元素中,则每个元素都需要设置 height:100%。https://jsfiddle.net/mwx1k3b3/398/ - Hrvoje Golcic

9
这就是它的全部内容:
要使“test”div增长到完整高度,您需要使内容也像这样display: flex: https://jsfiddle.net/wjr0wwht/2/
#content {
  flex: 1 1 auto;
  background: blue;
  display: flex;
  flex-direction: column;
}

然后使测试本身增长:

#content .test {
  background: yellow;
  border: 2px solid red;
  flex-grow: 1;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接