这是我第一次使用CSS Grid Layouts,它们非常棒,但是现在,我很难控制我的一个网格单元。
我想要的是有一个元素占用现有的空闲空间并且 * 不再 *,当内容变得太大时滚动。我的理解是,1fr
的网格大小在计算完所有其他内容后会占用相同数量的可用空间。我尝试了各种大小,如minmax(auto, 1fr)
,但没有效果-1fr
似乎会扩展以适应内容,这不是我想要的。设置像100px
这样的最大大小size也不好,因为我希望大小由网格中的其他元素确定。
下面是一个例子:
.container {
display: grid;
grid-template-rows: auto 1fr auto;
grid-template-columns: 1fr 1fr;
}
.container>div {
border: 1px solid blue;
border-radius: 5px;
}
.left {
grid-column: 1;
grid-row: 1/4;
}
.header {
grid-column: 2;
grid-row: 1;
}
.problem-child {
grid-column: 2;
grid-row: 2;
overflow-y: scroll;
}
.footer {
grid-column: 2;
grid-row: 3;
}
<div class="container">
<div class="left">left<br>I don't want this one to scroll<br>this should<br>determine<br>the height of the whole grid container</div>
<div class="header">column header</div>
<div class="problem-child">problem child:<br>I<br>want<br>this<br>to<br>scroll<br>rather<br>than<br>making<br>everything<br>tall</div>
<div class="footer">column footer</div>
</div>
我可以使用什么网格声明(如果有的话)来让"问题孩子"在溢出时滚动而不是展开?
4条答案
按热度按时间gopyfrb31#
height:0 + min-height:100%应在其网格单元格高度(由同级内容定义)内包含一个元素
你可以使用
max-height:100%;
和min-height
来留下足够的高度来显示一个合适的滚动条。**(firefox可以,chrome暂时不行)***一个二个一个一个
作为一种变通方法,您还可以在
absolute
位置使用一个额外的 Package 器,将其从流中取出,并将其大小调整为行的高度: (两种情况都需要最小高度,以便在需要时正确显示滚动条)*8wigbo562#
还有一个更优雅的解决方案,它使用viewport高度单位(vh),只需将
100vh
应用于容器:olqngx593#
在@G-Cyr的解决方案上添加。要使
max-height
工作,至少要有一个绝对定位的元素。将container设置为绝对定位。xn1cxnb44#
如果你在
problem-child
中定义了另一个网格,那么它同样不能正确渲染。你必须将overflow: auto
属性从任何父网格下推到子网格。检查给定的codepen: