首先,我使用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;
}
我得到了我想要的东西:
然后,我想在#main
div中显示三个框: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
div,否则#main
是不可见的。如果需要高度值,为什么还要使用flexbox ...
答案 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>