html - 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;
}
我得到了我想要的:
然后我想在#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
除非我将高度值设置为#main
div ,否则它是不可见的。如果需要高度值,我为什么还要使用 flexbox...
解决方案
您的代码中的主要问题是您没有display: flex
在#main
容器上指定。
因此,该元素不是 flex 容器,flex-direction: column
被忽略,并且子元素不是 flex 项。
请记住,flex 属性只在父元素和子元素之间起作用。因此,您的display: flex
onbody
元素仅适用于孩子,而不适用于其他后代。
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>
推荐阅读
- python - 如何使用 OneToOneField 创建模型对象
- java - 无法解析符号“ViewHolder”Java Android Studio
- go - 注册在 localhost 上运行的 grpc-gateway 处理程序时连接被拒绝错误
- django - Django:从模板中访问外键
- python - 如何在 Python 中公开我的 S3 存储桶中的对象图像?
- r - R 是什么??(两个问号)mean vs. ? (一个问号)
- python - 试图研究机器学习算法 KNN,但每次都没有得到正确的结果,而是只显示最后一列中存在的内容
- javascript - 安装 firebase 工具时出现问题,没有这样的文件或目录
- android - 为什么 Android 模拟器的嵌套虚拟化非常慢?
- javascript - Nuxt.js 中的按钮数量增加