我希望弹性项目占据剩余高度的100%并显示overflow: scroll
条。
看起来问题来自我的#userList
,它占据了窗口高度的100%而不占用剩余空间。
body {
display: flex;
flex-direction: column;
min-height: 100%;
margin:0px;
}
.wrapper {
display: block;
flex: 1 1 auto;
display: flex;
flex-direction: row; /
}
#chatContainer {
background: orange;
width: calc(100% - 350px);
display: flex;
flex-direction: column;
}
#tabs{
background-color: red;
flex: 1 1 0px;
display: flex;
}
#usersContainer {
flex: 1 1 0;
display:flex;
flex-direction:column;
}
#userListWrapper {
background-color:pink;
flex: 1 1 auto;
display:flex;
}
#userList {
-webkit-flex: 1 1 auto;
overflow: auto;
min-height: 0px;
height:100%;
}
.input {
background-color: #49FFFC;
}
<div class="wrapper">
<div id="chatContainer">
<div id="webcamContainer">webcam</div>
<div id="tabs">tabs here</div>
<div id="footer" style="background-color:#A0C8FF;height:50px">footer</div>
</div>
<div id="usersContainer" style="background-color:blue">
<div class="input">searchInput1</div>
<div class="input">searchInput2</div>
<div id="userList">
user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>
user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>
user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>
user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>user1<br>user2<br>
</div>
</div>
</div>
答案 0 :(得分:7)
您遇到的主要问题是违反了管理CSS百分比高度的规则。
基本上,使用百分比高度时,必须始终指定父元素的高度。否则,高度百分比的元素没有引用框架,高度计算为auto
(内容的高度)。
来自规范:
百分比
指定百分比高度。百分比是根据生成的框的包含块的高度计算的。如果未明确指定包含块的高度且此元素未绝对定位,则该值将计算为“auto”。自动
高度取决于其他属性的值。
因此,如果您计划使用百分比高度,则需要在每个父元素上指定一个高度,直到根元素(html
)或最多固定高度声明(例如height: 250px
)
在CSS中,您有body { min-height: 100%; }
。但是,父级(height
)上未指定html
。
代码中的以下父元素缺少height
声明:
html
body
(min-height
不计算在内).wrapper
#chatContainer
通过以下调整,您的布局可以正常工作。
html { height: 100%; } /* NEW */
body {
display: flex;
flex-direction: column;
/* min-height: 100%; */
margin: 0px;
height: 100%; /* NEW */
}
.wrapper {
display: block;
flex: 1 1 auto;
display: flex;
flex-direction: row;
height: 100%; /* NEW */
}
#chatContainer {
background: orange;
width: calc(100% - 350px);
display: flex;
flex-direction: column;
height: 100%; /* NEW */
}
当前浏览器也值得一提。
百分比高度:Chrome / Safari与Firefox / IE
虽然百分比高度的传统实现使用height
属性的值,但最近一些浏览器扩大了范围。
如以下帖子所示,Firefox和IE现在也使用弹性高度来解析子元素的百分比高度。
底线:Chrome和Safari根据父级height
属性的值来解析百分比高度。 Firefox和IE11 / Edge使用父计算的弹性高度。
目前,对于这个问题,最简单的跨浏览器解决方案是,在我看来,全面使用height
属性的百分比高度。