防止子div溢出父div

Rig*_*Zen 10 css overflow

我有一个包含标题部分和正文部分的父div.父div具有最大高度,但没有最小高度.

看这个例子:https://jsfiddle.net/1o79a6nc/2/

#cont {
  padding: 5px;
  background-color: red;
  max-height: 150px;
  max-width: 50%;
}
#body {
  background-color: blue;
  overflow-y: auto;
  overflow-x: hidden;
}
#head {
  background-color: green;
}
Run Code Online (Sandbox Code Playgroud)
<div id='cont'>
  <div id='head'>
    <div>Head</div>
  </div>
  <div id='body'>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我希望主体只展开以便它适合父级(包括填充),然后在必要时应用滚动条.

如示例所示,我已尝试过overflow-y: auto,但这并不像我预期的那样有效.

编辑:我希望滚动条仅显示在正文上,以便头部和父底部填充始终可见.

Sti*_*ers 12

您只需将容器设置为flexbox即可.

#cont {
  padding: 5px;
  background-color: red;
  max-height: 150px;
  max-width: 50%;
  display: flex; /*added*/
  flex-direction: column; /*added*/
}
Run Code Online (Sandbox Code Playgroud)

的jsfiddle

#cont {
  padding: 5px;
  background-color: red;
  max-height: 150px;
  max-width: 50%;
  display: flex; /*added*/
  flex-direction: column; /*added*/
}
#body {
  background-color: blue;
  overflow-y: auto;
  overflow-x: hidden;
  flex: 1; /* added */
}
#head {
  background-color: green;
}
Run Code Online (Sandbox Code Playgroud)
<div id='cont'>
  <div id='head'>
    <div>Head</div>
  </div>
  <div id='body'>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
    <div>Body</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

另一个选择是使用CSS表,需要一些额外的HTML代码.并且max-height不适用于表格布局,因此请height改用.

的jsfiddle

#cont {
  padding: 5px;
  background-color: red;
  height: 150px;
  width: 50%;
  display: table;
}
#head,
#body {
  display: table-row;
}
#head > div,
#body > div {
  display: table-cell;
  position: relative;
}
#body > div {
  height: 100%;
}
#body > div > div {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  overflow-y: auto;
  overflow-x: hidden;
}
#body {
  background-color: blue;
  overflow-y: auto;
  overflow-x: hidden;
}
#head {
  background-color: green;
}
Run Code Online (Sandbox Code Playgroud)
<div id='cont'>
  <div id='head'>
    <div>Head</div>
  </div>
  <div id='body'>
    <div>
      <div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
        <div>Body</div>
      </div>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


小智 7

这个解决方案对我有用,它仅在子 div 中显示垂直滚动条。

.parent
{
    height : 300px ; //for example
    overflow: hidden;
}  

.child  
{   
    max-height: 100%;
    overflow-y: scroll;
}
Run Code Online (Sandbox Code Playgroud)

  • 不,如果还有另一个孩子,这个孩子就比应有的大了 (2认同)