填充可用高度,然后在没有更多空间时滚动
Fill available height, then scroll when no more room
我想要一个列中的两个元素 (div)。第一个有固定的高度,第二个我想填充所有剩余的高度。如果第二个元素的内容超出 space 左边,我想滚动它的内容,而不是让第二个元素占用更多 space (这会导致父级滚动)。
Image (current)
例如,"first element" 是这张照片中的搜索栏。固定高度,并保持在顶部。
"second element"是数据table。正如您在底部看到的,table 内容扩展了页面的高度,整个页面变得可滚动。这不是我要找的。
Image (desired) 我希望 table 容器的行为类似于这个红色框。它填充它的剩余高度,当它包含溢出的内容时,我只想滚动该元素。只滚动红框范围内的内容。
类似这样的例子我看过很多,但是都给"second element"指定了高度,哪怕是vh
属性。 vh
对我不起作用,因为 100% 不是整个视口。
我一直在使用 flexbox 来尝试实现这一点,我已经接近了,但我只能为 "second element" 指定一个高度,或者让它增长以填充可用space,但超过它,溢出整个容器。
下面的代码非常接近期望的行为,除了当视口变小时,"box 2" 离开屏幕并且整个内容滚动,我希望 "box 2" 中的内容滚动。
html,
body {
height: 100%;
}
.container {
height: 100%;
min-height: 100%;
display: flex;
flex-direction: column;
.box {
text-align: center;
color: white;
font-family: sans-serif;
font-size: 36px;
padding: 20px;
display: flex;
flex-direction: column;
justify-content: center;
}
.box-1 {
background-color: green;
height: 60px;
}
.box-2 {
background-color: blue;
flex: 1;
}
<div class="container">
<div class="box box-1">box 1</div>
<div class="box box-2">box 2</div>
</div>
html,
body {
height: 100%;
margin: 0;
}
.container {
height: 100vh;
display: flex;
flex-direction: column;
}
.box {
text-align: center;
color: white;
font-family: sans-serif;
font-size: 36px;
padding: 20px;
}
.box-1 {
background-color: green;
height: 60px;
}
.box-2 {
background-color: blue;
height: 100%;
overflow: auto;
}
只需在第二个 div 上应用 overflow:auto
并在容器上应用最大高度。
* {
margin: 0;
padding: 0;
}
html,
body {
height: 100%;
}
.container {
max-height: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.box {
text-align: center;
color: white;
font-family: sans-serif;
font-size: 36px;
padding: 20px;
justify-content: center;
}
.box-1 {
background-color: green;
height: 60px;
}
.box-2 {
background-color: blue;
flex: 1;
overflow: auto;
}
.expando {
height: 1000px;
/* for demo */
}
<div class="container">
<div class="box box-1">box 1</div>
<div class="box box-2">box 2
<div class="expando"></div>
</div>
</div>
我想要一个列中的两个元素 (div)。第一个有固定的高度,第二个我想填充所有剩余的高度。如果第二个元素的内容超出 space 左边,我想滚动它的内容,而不是让第二个元素占用更多 space (这会导致父级滚动)。
Image (current) 例如,"first element" 是这张照片中的搜索栏。固定高度,并保持在顶部。
"second element"是数据table。正如您在底部看到的,table 内容扩展了页面的高度,整个页面变得可滚动。这不是我要找的。
Image (desired) 我希望 table 容器的行为类似于这个红色框。它填充它的剩余高度,当它包含溢出的内容时,我只想滚动该元素。只滚动红框范围内的内容。
类似这样的例子我看过很多,但是都给"second element"指定了高度,哪怕是vh
属性。 vh
对我不起作用,因为 100% 不是整个视口。
我一直在使用 flexbox 来尝试实现这一点,我已经接近了,但我只能为 "second element" 指定一个高度,或者让它增长以填充可用space,但超过它,溢出整个容器。
下面的代码非常接近期望的行为,除了当视口变小时,"box 2" 离开屏幕并且整个内容滚动,我希望 "box 2" 中的内容滚动。
html,
body {
height: 100%;
}
.container {
height: 100%;
min-height: 100%;
display: flex;
flex-direction: column;
.box {
text-align: center;
color: white;
font-family: sans-serif;
font-size: 36px;
padding: 20px;
display: flex;
flex-direction: column;
justify-content: center;
}
.box-1 {
background-color: green;
height: 60px;
}
.box-2 {
background-color: blue;
flex: 1;
}
<div class="container">
<div class="box box-1">box 1</div>
<div class="box box-2">box 2</div>
</div>
html,
body {
height: 100%;
margin: 0;
}
.container {
height: 100vh;
display: flex;
flex-direction: column;
}
.box {
text-align: center;
color: white;
font-family: sans-serif;
font-size: 36px;
padding: 20px;
}
.box-1 {
background-color: green;
height: 60px;
}
.box-2 {
background-color: blue;
height: 100%;
overflow: auto;
}
只需在第二个 div 上应用 overflow:auto
并在容器上应用最大高度。
* {
margin: 0;
padding: 0;
}
html,
body {
height: 100%;
}
.container {
max-height: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.box {
text-align: center;
color: white;
font-family: sans-serif;
font-size: 36px;
padding: 20px;
justify-content: center;
}
.box-1 {
background-color: green;
height: 60px;
}
.box-2 {
background-color: blue;
flex: 1;
overflow: auto;
}
.expando {
height: 1000px;
/* for demo */
}
<div class="container">
<div class="box box-1">box 1</div>
<div class="box box-2">box 2
<div class="expando"></div>
</div>
</div>