【发布时间】:2023-01-27 23:01:16
【问题描述】:
我想实现以下目标: 该页面有一个标题,然后是一个占据剩余垂直空间的内容容器。在内容容器内是另一个标题和内容容器,它也应该填充剩余的高度。内部内容容器的内容可能超过高度,在这种情况下它应该垂直滚动。
我试图用 flexbox 实现这一点,但由于某种原因,长列表溢出并且不滚动。我通过在 .content 容器上设置 overflow-y: auto 来关闭,但是内部标题也会滚动,这不是我想要的。我只想滚动 .inner-content 容器的内容。
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
}
.container {
display: flex;
flex-direction: column;
height: 100vh;
background: lightgoldenrodyellow;
}
.header {
background-color: black;
flex: 0 1 auto;
color: white;
}
.content {
flex: 1;
background-color: white;
display: flex;
flex-direction: column;
width: 800px;
padding: 1rem;
margin: 1rem auto;
}
.heading {
flex: 0 1 auto;
}
.inner-content {
flex: 1;
display: flex;
}
.scrollable-content {
overflow-y: auto;
width: 200px;
flex-shrink: 0;
}
.scrollable-content ul {
margin: 0;
padding: 0;
}
.preview img {
width: 100%;
height: 100%;
object-fit: cover;
}
<div class="container">
<div class="header">
<h1>Foo bar baz</h1>
<p>Lorem ipsum</p>
</div>
<div class="content">
<h2 class="heading">Lorem Ipsum</h2>
<div class="inner-content">
<div class="scrollable-content">
<ul>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
<li>List item</li>
</ul>
</div>
<div class="preview">
<img src="https://images.unsplash.com/photo-1574001412492-7555e61a9b53?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2070&q=80" />
</div>
</div>
</div>
</div>
【问题讨论】:
-
.scrollable-content add height or max, min height 然后它会滚动
-
正如 nisha 所说,如果你想滚动,你需要有一个高度。这里的问题是您只有容器的高度为 100vh,其他任何 div 都没有。使用 flex 显示,inner-content 中的元素将拉伸其高度。您可以使用网格而不是 flex,外部的简单网格(2 行,1 列),以及第 2 行内的另一个(嵌套的)简单网格。网格是 2 个维度,仅 flex 1
-
感谢您的见解,不幸的是我不想设置一个明确的高度,而是让它取决于屏幕高度(这就是为什么外部元素上有 100vh 的原因)。 @pierfarrugia 使用网格似乎不起作用:xogkz3.csb.app