bounty还有2天到期。回答此问题可获得+50声望奖励。Pierre Fischer希望引起更多关注此问题。
我有三个div:
- 灰色的div是定义高度的外部div
- 绿色的div是一个div,它允许滚动
- 红色的div,表示内容
下面的代码示例是我创建的一个最小示例,用于复制我的问题。
.outside {
max-height: 500px;
background-color: gray;
}
.inside {
overflow-y: scroll;
height: 100%;
background-color: green;
margin-right: 100px;
}
.content {
height: 2000px;
background-color: red;
margin-right: 100px;
}
<html>
<body style="overflow-y: hidden">
<div class="outside">
<div class="inside">
<div class="content"></div>
</div>
</div>
</body>
</html>
虽然灰色div的max-height为500px
,但绿色div的height为红色div的height,并且不会滚动内部的内容。
将height: 100%
设置为灰色div时,滚动效果与预期一样,适用于大于灰色div高度的内容。如果内容(红色div)较小,我希望绿色div仅为其内容的高度。
7条答案
按热度按时间ct2axkht1#
有几种方法可以做到这一点(如前所述)。在某些情况下,在移动的设备上使用viewport height可能会有问题。不要使用vh,将灰色容器转换为flex对象。
小提琴:https://jsfiddle.net/0fhga6vt/
brqmpdu12#
你需要的这一行是溢出:hidden;当你给予你顽固的内部div溢出的那一刻:hidden,它会切断多余的部分。
您还应该将内部div的高度设置为100%,这意味着它不应该超过父div的最大高度。
gzjq41n43#
为了让内部div(
height: 100%
)工作,父.outside
元素也必须有一个固定的高度。不幸的是,max-height
不工作,因为它不是一个固定的高度。我建议根据视口高度添加一个合理的高度。max-height将确保它不大于500 px,.inside
元素将开始工作,正如你所期望的。qxgroojn4#
outside
div中只有inside
div,如果对inside
div使用flex: 1
的flex box列,内部div将采用其父级的高度,而不会溢出。outside
div将缩小到content
div的高度。您可以随意使用不同的内容高度进行测试,如果有任何不清楚的地方,请在评论中询问。
rryofs0p5#
你可以将父容器设置为显示为flex,并使用flex-grow属性使绿色div扩展以填充剩余空间。下面是一个示例代码:
使用此代码,当内容小于灰色div的高度时,绿色div将扩展以填充剩余的空间,并且当它更大时,它将滚动内部的内容。
zrfyljdw6#
一个优雅的
grid
+fit-content
解决方案:***P.S.*如果您还想适应窗口高度:
tzdcorbm7#