flex:1属性的div未设固定高度时overflow: scroll失效如何解决
解决方案
你不需要通过calc计算高度,只需要利用flex布局的特性,给对应父容器添加min-height: 0即可解决问题。
原理说明
flex 布局中,沿主轴方向的子元素默认min-height(主轴为纵向时)/min-width(主轴为横向时)值为auto,该规则会让子元素优先适配内容高度,无法被父容器限制高度,也因此无法触发overflow滚动规则。
你当前的布局里,只需要给.content、.chatbox、.list三个类添加min-height:0,就能让消息列表自动占满剩余可用高度,内容溢出时自动触发纵向滚动,完全适配header和send模块的动态高度。
修改后完整CSS代码
* { margin: 0; padding: 0; box-sizing: border-box; } .container { height: 100vh; width: 100vw; display: flex; flex-direction: column; border: 2px solid black; } .header { width: 100%; border: 2px solid red; min-height: 3rem; } .content { flex: 1; display: flex; border: 2px solid green; min-height: 0; /* 新增规则 */ } .chatbox { flex: 1; border: 2px solid yellow; display: flex; flex-direction: column; min-height: 0; /* 新增规则 */ } .members { width: 15rem; border: 2px solid blue; } .list { flex: 1; border: 2px solid grey; display: flex; flex-direction: column; align-items: flex-start; gap: 0.5rem; overflow-y: auto; /* 可替换原scroll规则,无溢出时隐藏滚动条 */ min-height: 0; /* 新增规则 */ } li { width: 100%; border: 1px solid black; } .send { height: 5rem; border: 2px solid purple; }
同类问题延伸:如果是横向flex布局遇到溢出滚动不生效的情况,给对应flex子项添加
min-width: 0即可解决。
内容的提问来源于stack exchange,提问作者AvaPLaIN
相关产品推荐
相关产品推荐

