【问题标题】:How to make child div scrollable when it exceeds parent height?当子div超过父高度时如何使子div可滚动?
【发布时间】:2015-01-05 17:31:01
【问题描述】:

我有 2 个子 div 以行列模式嵌套在父 div 中:父是一列,子是行。

上子div的高度可变,但保证小于父div的高度。

较低的子 div 也是可变高度的。在某些情况下,子 div 的高度会使较低的子 div 超过父级。在这种情况下,我需要使下部 div 可滚动。请注意,我只希望较低的 div 可以滚动,而不是整个父 div。

我该如何处理?

案例示例见附件 jsfiddle:http://jsfiddle.net/0yxnaywu/5/

HTML:

 <div class="parent">
    <div class="child1">
        hello world filler
    </div>
    <div class="child2">
        this div should overflow and scroll down
    </div>
</div>

CSS:

.parent {
    width: 50px;
    height: 100px;
    border: 1px solid black;
}

.child1 {
    background-color: red;
}

.child2 {
    background-color: blue;
}

【问题讨论】:

  • 你需要为父jsfiddle.net/0yxnaywu/1添加滚动条
  • 所以这使得整个父 div 可以滚动,我希望只有较低的子 div 可以滚动。
  • 不肯定,但我认为您必须使用一些 javascript。溢出仅在您给它一个大于时溢出的值时才起作用。你的价值是相对于顶部有多大,我认为你需要抓住然后计算。
  • 查看我的答案以获取示例。

标签: html css


【解决方案1】:

因为这篇文章在 Google 中的排名仍然很高,所以我想发布一个使用 flexbox 的更好的解决方案。其实这很简单。 使用 display: flex、flex-direction: column 和 overflow: hidden 作为父级和 overflow-y: auto给孩子。

.wrapper {
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.scrollable-child {
  overflow-y: auto;
}

这是笔: https://codepen.io/pawelsas/pen/vdwjpj

【讨论】:

  • 它也可以在没有 .wrapper 的overflow: hidden; 的情况下工作
  • 感谢 2018 年的回答,就我而言,我还必须在 .wrapper 上声明 flex: 1 以填充屏幕空间
  • 点赞!先生,您为我节省了 1 小时的高度
  • 我的意思是你发布一个更好的解决方案的理由是因为在谷歌上的排名很好是不合理的,但解决方案对我有用
【解决方案2】:

只有当你给它一个大于时溢出的值时,溢出才有效。您的值与顶部的大小有关,因此使用 jQuery,获取该值然后从父级中减去。

$(document).ready(function() {
  $(".child2").css("max-height", ($(".parent").height()-$(".child1").height()));
});

并将overflow's 添加到孩子

.child1 {
    background-color: red;
    overflow: hidden;
}

.child2 {
    background-color: blue;
    overflow: auto;
}

http://jsfiddle.net/m9goxrbk/

【讨论】:

  • 有道理!想知道如果没有 Javascript 这是否可能,但即便如此我认为这个解决方案很优雅。谢谢。
  • 当时的答案很好,但现在已经过时了。
【解决方案3】:

使用overflow 属性:

.parent {
    width: 50px;
    height: 100px;
    border: 1px solid black;
    overflow: auto;
}

jsFiddle

编辑:

如果您只希望第二个 div 可滚动,则需要将其高度更改为 30px,以便 child1 和 child2 将完全适合父 height 并在此处添加 overflow 属性:

.parent {
    width: 50px;
    height: 100px;
    border: 1px solid black;
}

.child1 {
    height: 70px;
    background-color: red;
}

.child2 {
    height: 30px;
    background-color: blue;
    overflow: auto;
}

jsFiddle

【讨论】:

  • 他们希望只有子 div 2 可以滚动,而不是父级。
猜你喜欢
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 2012-12-13
  • 2011-06-27
  • 1970-01-01
  • 2016-09-27
  • 2019-02-27
  • 1970-01-01
相关资源
最近更新 更多