首页 > 解决方案 > flex-grow 不扩展弹性项目

问题描述

首先,我使用 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;
}

我得到了我想要的:

标题和主 div

然后我想在#maindiv里面显示三个盒子:box_1、box_2和box_3。box_1 和 box_3 具有相同的高度值,并且 box_2扩展自身以获取剩余高度#main

我想要的是:

我添加以下代码:

<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除非我将高度值设置为#maindiv ,否则它是不可见的。如果需要高度值,我为什么还要使用 flexbox...

标签: htmlcssflexbox

解决方案


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

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

请记住,flex 属性只在父元素和子元素之间起作用。因此,您的display: flexonbody元素仅适用于孩子,而不适用于其他后代。

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>


推荐阅读