我试图让一个子CSS网格尊重父网格的尺寸.我怎么能这样做?
我最初写的是这样的:https: //codepen.io/anon/pen/XVExrj
CSS:
.site,
body,
html {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
.parent-grid {
display: grid;
height: 300px;
width: 300px;
grid-template-rows: 30px 1fr;
grid-template-columns: 1fr;
grid-template-areas: 'nav' 'child';
background-color: grey;
}
.nav {
background-color: #0D47A1;
grid-area: nav;
}
.child {
grid-area: child;
}
.child-grid {
display: grid;
grid-template-rows: 1fr;
grid-template-columns: 1fr;
grid-template-areas: 'test';
background-color: grey;
}
.content {
background-color: red;
overflow: auto;
grid-area: test;
}
* {
box-sizing: border-box;
}Run Code Online (Sandbox Code Playgroud)
HTML
<div class="parent-grid">
<div class="nav">Sidebar</div>
<div class="child">
<div class="child-grid">
<div class="content">
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
我希望'content'是一个可滚动的区域,不会扩展父级的高度(所以它应该是'270px')
默认情况下.child会提供网格项()min-height: auto.适用min-height: 0于.child推翻这一点.
然后加入height: 100%到.child-grid和overflow: auto到content...
.site,
body,
html {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
.parent-grid {
display: grid;
height: 300px;
width: 300px;
grid-template-rows: 10vh 1fr;
grid-template-columns: 1fr;
grid-template-areas: 'nav' 'child';
background-color: grey;
}
.nav {
background-color: #0D47A1;
grid-area: nav;
}
.child {
grid-area: child;
min-height: 0;
}
.child-grid {
display: grid;
grid-template-rows: 1fr;
grid-template-columns: 1fr;
grid-template-areas: 'test';
background-color: grey;
height: 100%;
}
.content {
background-color: red;
overflow: auto;
grid-area: test;
}
* {
box-sizing: border-box;
}Run Code Online (Sandbox Code Playgroud)
<div class="parent-grid">
<div class="nav">Sidebar</div>
<div class="child">
<div class="child-grid">
<div class="content">
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
这是一个快速而简单的解决方案,不会对您的HTML进行任何更改.只需将其添加到您的代码中:
.child {
overflow: auto;
}
Run Code Online (Sandbox Code Playgroud)
这将覆盖min-height: auto网格项的默认设置,允许它们缩小到低于其内容的大小并创建溢出条件.
这里有完整的解释:防止内容扩展网格项
.site,
body,
html {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
.parent-grid {
display: grid;
height: 300px;
width: 300px;
grid-template-rows: 30px 1fr;
grid-template-columns: 1fr;
grid-template-areas: 'nav' 'child';
background-color: grey;
}
.nav {
background-color: aqua;
grid-area: nav;
}
.child {
grid-area: child;
overflow: auto; /* NEW */
}
.child-grid {
display: grid;
grid-template-rows: 1fr;
grid-template-columns: 1fr;
grid-template-areas: 'test';
background-color: grey;
}
.content {
background-color: red;
overflow: auto;
grid-area: test;
}
* {
box-sizing: border-box;
}Run Code Online (Sandbox Code Playgroud)
<div class="parent-grid">
<div class="nav">Sidebar</div>
<div class="child">
<div class="child-grid">
<div class="content">
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
或者,而不是你在这里:
.parent-grid {
display: grid;
height: 300px;
grid-template-rows: 30px 1fr;
}
Run Code Online (Sandbox Code Playgroud)
试试这个:
.parent-grid {
display: grid;
grid-template-rows: 30px 270px;
}
.content {
overflow: auto;
height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
我还删除了一个.child-grid似乎没有必要的额外容器().
.site,
body,
html {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
.parent-grid {
display: grid;
height: 300px;
width: 300px;
grid-template-rows: 30px 270px;
grid-template-columns: 1fr;
grid-template-areas: 'nav' 'child';
background-color: grey;
}
.nav {
background-color: aqua;
grid-area: nav;
}
.child {
grid-area: child;
}
.content {
background-color: red;
overflow: auto;
height: 100%;
}
* {
box-sizing: border-box;
}Run Code Online (Sandbox Code Playgroud)
<div class="parent-grid">
<div class="nav">Sidebar</div>
<div class="child">
<div class="content">
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
<div>blah</div>
</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)