flex-grow不扩展flex项目

时间:2018-08-25 14:33:00

标签: html css html5 css3 flexbox

首先,我使用flexbox创建一个布局:

<html>
  <body>
    <div id="header"></div>
    <div id="main"></div>
  </body>
</html>

header div具有固定的height: 60px,主div占据屏幕的剩余高度:

html, body{
  100%;
}
body{
  display: flex;
  flex-direction: column;   
}
#header{
  height: 60px;
  flex-grow: 0;
}
#main{
  flex-grow: 1;
}

我得到了我想要的东西:

header and main div

然后,我想在#main div中显示三个框:box_1,box_2和box_3。 box_1和box_3具有相同的高度值,box_2 扩展自身以获取#main 的剩余高度:

What I want:

我添加以下代码:

<html>
  <body>
    <div id="header"></div>
    <div id="main">
      <div id="box_1"></div>
      <div id="box_2"></div>
      <div id="box_3"></div>
    </div>
  </body>
</html>

#main{
  flex-grow: 1;
  flex-direction: column;
}
#box_1, #box_3{
    height: 60px;
    flex-grow: 0;
    background-color: red;
}
#box_2{
    flex-grow: 1;
    background-color: blue;
}

除非将高度值设置为#box_2 div,否则#main是不可见的。如果需要高度值,为什么还要使用flexbox ...

1 个答案:

答案 0 :(得分:0)

代码中的主要问题是您没有在display: flex容器上指定#main

因此,该元素不是flex容器,flex-direction: column被忽略,子元素也不是flex项。

请记住flex properties work only between parent and child elements。因此,您在display: flex元素上的body仅适用于子代,不适用于其他子代。

body {
  display: flex;
  flex-direction: column;
  height: 100vh;
  margin: 0;
}

header {
  flex: 0 0 60px;               /* flex-grow, flex-shrink, flex-basis */
  background-color: lightgray;
}

main {
  flex-grow: 1;
  background-color: aqua;
  display: flex;                 /* key addition */
  flex-direction: column;
}

#box_1, #box_3 {
  flex: 0 0 60px;
  background-color: red;
}

#box_2 {
  flex-grow: 1;
  background-color: blue;
}
<header></header>
<main>
  <div id="box_1"></div>
  <div id="box_2"></div>
  <div id="box_3"></div>
</main>