html - 在弹性盒内使用时,网格没有占据其 div 的全部高度
问题描述
我在一列中有一个grid
( .genTempGrid
) flexbox
(反过来,它也在 column 内flexbox
)。奇怪的是,createdgrid
并没有占据其 div 的全部高度,相反,它的高度仅限于其内容。
我的理解是,无论如何,grid
它所在的div的高度==高度。如果我错了,请纠正我。
.d-flex-column-last-child-flex-grow-1 {
flex-grow: 1;
display: flex;
flex-direction: column;
/*height: 100%;*/
}
.child-expand {
flex-grow: 1;
}
.genTempGrid {
display: grid;
height: 100%;
grid-template-columns: 20% 60% 20%;
grid-template-rows: 1fr;
background-color: #f7f7f7;
}
.border1 {
border: 1px solid red;
}
<div class="d-flex-column-last-child-flex-grow-1" style="height: 50vh">
<div class=" d-flex-column-last-child-flex-grow-1 child-expand">
<div class="pl-3 genTempGrid pt-2 child-expand border1">
<div class="border1">hi</div>
<div>hi</div>
<div>hi</div>
</div>
</div>
</div>
编辑:我不是在寻找解决方法。我更想知道当前行为背后的原因。
解决方案
这是由于这条线
.d-flex-column-last-child-flex-grow-1 {
flex-grow: 1;
}
有关完整说明,请参阅:为什么 flex 项目不缩小超过内容大小?和让孩子适应父母
这可以通过使用简写flex:1
代替或应用min-(dimension): 0
强制重新计算的 a 来解决。
.d-flex-column-last-child-flex-grow-1 {
flex: 1;
display: flex;
flex-direction: column;
}
.child-expand {
flex-grow: 1;
}
.genTempGrid {
display: grid;
height: 100%;
grid-template-columns: 20% 60% 20%;
grid-template-rows: 1fr;
background-color: #f7f7f7;
}
.border1 {
border: 1px solid red;
}
<div class="d-flex-column-last-child-flex-grow-1" style="height: 50vh">
<div class=" d-flex-column-last-child-flex-grow-1 child-expand">
<div class="pl-3 genTempGrid pt-2 child-expand border1">
<div class="border1">hi</div>
<div>hi</div>
<div>hi</div>
</div>
</div>
</div>
推荐阅读
- node.js - Node JS 反向代理 - POST 抛出 404 错误
- docker - 你可以在 windows-server-core docker 容器中运行 gulp 吗?
- wordpress - 无法再访问 Wordpress 资产
- c# - 为同一应用程序的两个不同站点配置 web.config
- react-native - 当我在同一个应用程序中切换页面时如何保持地理定位运行?
- javascript - 从 json 和 url 检索数据
- html - 边框增加了额外的 1px
- java - 如何将 Java AES - CBC 与 PKCS5 填充更改为 PHP
- angular - 验证 mat-autocomplete 是对象
- python - 复制嵌套列表并用连续的数字填充