13

我想要一个具有最大高度的父元素和一个填充该父元素的子元素。如果子项的内容超出父项,则应出现滚动条。我试图这样解决它:

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

div.child {
  height: 100%;
  overflow-y: auto;
}
<div class="parent">
  <div class="child">
    <div class="some-content">
      abcde<br>abcde<br>abcde<br>abcde<br>abcde<br> abcde
      <br>abcde<br>abcde<br>abcde<br>abcde<br> abcde
      <br>abcde<br>abcde<br>abcde<br>abcde<br> abcde
      <br>abcde<br>abcde<br>abcde<br>abcde<br> abcde
      <br>abcde<br>abcde<br>abcde<br>abcde<br>
    </div>
  </div>
</div>

不幸的是,这并没有按预期工作。孩子在父母之上成长。

请尊重,将 overflow-y: auto 设置为 PARENT 不是一个选项,因为它被怀疑包含不应滚动的其他项目。怀疑孩子填补了父母留下的空间。有关更多信息,请参阅现场演示。

现场演示

4

3 回答 3

5

据我所知,没有简单的方法可以用 CSS 做到这一点。本质上,您是在要求浏览器用可滚动元素填充剩余空间。你可以用 JavaScript 做到这一点(这个例子使用 jQuery,因为我很懒):

$('.parent').each(function(){
    $(this).children('.child').height($(this).height() - $(this).children('.sibling').height()+"px");
});

http://jsfiddle.net/BUxUe/13/

于 2013-09-30T12:03:51.007 回答
1

您可以尝试使用 Flexbox。

div.parent {
    max-height: 300px;
    width: 200px;
    border: 1px solid black;
    display: flex;
    flex-direction: column;
}
div.sibling {
    border: 1px solid red;
    flex: 0 0 auto;
}
div.child {
    overflow-y: auto;
    border: 1px solid blue;
    flex: 0 1 auto;
}

我不确定,这是否是一种黑客行为。但它似乎解决了这个问题。

于 2015-10-01T11:29:31.347 回答
-2

看看这个小提琴

div.parent {
    max-height: 50px;
    width: 100px;

    border: 1px solid black;
    overflow:scroll;
}

div.child {
    height: 100%; 
}
于 2013-09-30T12:10:52.833 回答