Flexbox - 儿童扩展到填充高度

Hob*_*ist 15 html css css3 flexbox

我的页面上有一个动态页脚,我希望它上面的内容可以扩展到页脚的顶部,这很好,但是我遇到了一个问题:

#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;
}
Run Code Online (Sandbox Code Playgroud)
<div id="snippet-container">
  <div id="page">
    <div id="content">
      <div class="test"></div>
    </div>
    <div id="footer"></div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望.test元素填充#content元素,因此100%/100% width/height它不会.

当我.test在片段中为元素添加红色边框时,您可以看到这反映出来.

Ric*_*cky 20

问题:

问题是,你的#pageFlex容器没有达到.test元素,因为.test是不是一个孩子,这是Flex项目的后代.

Flex容器的内容由零个或多个flex项组成:flex容器的每个子项都变为flex项.

每个flex项都受Flex容器的影响,但flex项的后代不受影响.


解:

你需要添加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;
}
Run Code Online (Sandbox Code Playgroud)
<div id="snippet-container">
  <div id="page">
    <div id="content">
      <div class="test"></div>
    </div>
    <div id="footer"></div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


sif*_*day 6

这适合你:

https://jsfiddle.net/wjr0wwht/2/

为了使'test'db增长到全高,你需要使内容也display: flex像这样:

#content {
  flex: 1 1 auto;
  background: blue;
  display: flex;
  flex-direction: column; 

}
Run Code Online (Sandbox Code Playgroud)

然后让测试本身成长:

#content .test {
  background: yellow;
  border: 2px solid red;
  flex-grow: 1;
} 
Run Code Online (Sandbox Code Playgroud)