防止childdiv溢出parentdiv
Prevent child div from overflowing parent div
我有一个 parent div 包含一个 header 部分和一个 body 部分。 parent 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;
}
<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>
我希望 body 仅展开以使其适合 parent(包括填充),然后在必要时应用滚动条。
如示例所示,我已尝试 overflow-y: auto
,但是这并不像我预期的那样有效。
编辑:我希望滚动条只出现在 body 上,以便头部和 parent 底部填充始终可见。
您可以简单地将容器设置为 flexbox。
#cont {
padding: 5px;
background-color: red;
max-height: 150px;
max-width: 50%;
display: flex; /*added*/
flex-direction: column; /*added*/
}
#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;
}
<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>
另一种选择是使用 CSS table,需要一些额外的 HTML 代码。 max-height
不适用于 table 布局,因此请改用 height
。
#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;
}
<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>
我更新了你的 jsfiddle 检查一下
#cont {
padding: 5px;
background-color: red;
max-height: 150px;
max-width: 50%;
overflow-y: scroll;
}
#body {
background-color: blue;
}
#head {
background-color: green;
}
这个解决方案对我有用,它只在子 div 中显示垂直滚动条。
.parent
{
height : 300px ; //for example
overflow: hidden;
}
.child
{
max-height: 100%;
overflow-y: scroll;
}
我有一个 parent div 包含一个 header 部分和一个 body 部分。 parent 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;
}
<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>
我希望 body 仅展开以使其适合 parent(包括填充),然后在必要时应用滚动条。
如示例所示,我已尝试 overflow-y: auto
,但是这并不像我预期的那样有效。
编辑:我希望滚动条只出现在 body 上,以便头部和 parent 底部填充始终可见。
您可以简单地将容器设置为 flexbox。
#cont {
padding: 5px;
background-color: red;
max-height: 150px;
max-width: 50%;
display: flex; /*added*/
flex-direction: column; /*added*/
}
#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;
}
<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>
另一种选择是使用 CSS table,需要一些额外的 HTML 代码。 max-height
不适用于 table 布局,因此请改用 height
。
#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;
}
<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>
我更新了你的 jsfiddle 检查一下
#cont {
padding: 5px;
background-color: red;
max-height: 150px;
max-width: 50%;
overflow-y: scroll;
}
#body {
background-color: blue;
}
#head {
background-color: green;
}
这个解决方案对我有用,它只在子 div 中显示垂直滚动条。
.parent
{
height : 300px ; //for example
overflow: hidden;
}
.child
{
max-height: 100%;
overflow-y: scroll;
}