You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让#parent_box适配空间且不发生溢出?

解决Flex布局中容器被内容撑大的问题

要让#parent_box适配body剩余空间,同时阻止#left_box添加元素时撑大容器,需要调整flex布局的约束设置,具体修改如下:

核心修改点

  • 给#parent_box设置flex: 1,让它占据#outer_box的剩余可用空间,同时添加overflow: hidden确保内部元素的overflow规则生效
  • 移除#left_box和#right_box的max-height: inherit,改为依赖父容器的高度约束,确保overflow-y: auto能正确触发滚动

修改后的完整代码

CSS部分

body {
  display: flex;
  flex-direction: column;
  max-height: 50vh;
  margin: 0; /* 移除默认margin避免布局偏移 */
}

#outer_box {
  flex: 1;
  display: flex;
  flex-direction: column;
}

#parent_box {
  display: flex;
  flex: 1; /* 关键:占据outer_box剩余空间 */
  overflow: hidden; /* 关键:建立BFC,限制内部元素高度 */
}

#left_box,
#right_box {
  flex: 1;
  display: flex;
  flex-direction: column;
  overflow-y: auto; /* 内容超出时垂直滚动 */
}

#left_box {
  background: grey;
}

#left_box div {
  flex: 1;
}

#right_box {
  background: yellow;
}

#line {
  min-height: 20px;
  background: blue;
}

HTML部分(无需修改)

<div id="outer_box">
  <div>item1</div>
  <div>item2</div>
  <div id="parent_box">
    <div id="left_box"></div>
    <div id="right_box"></div>
  </div>
</div>
<div id="line"></div>

JS部分(无需修改)

let box = document.getElementById('left_box')
for (let i = 0; i < 15; i++) {
  let e = document.createElement('div')
  e.innerText = 'some text goes here'
  box.appendChild(e)
}

原理说明

  • #parent_box通过flex:1获取#outer_box的剩余空间,overflow:hidden让它成为块级格式化上下文(BFC),内部元素的高度会被限制在容器范围内
  • #left_box的overflow-y:auto此时会生效,当内容高度超过容器时自动显示滚动条,不会向外撑大#parent_box

内容的提问来源于stack exchange,提问作者mal1213

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:47:15