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

如何实现父容器占满body高度时,子div动态高度且overflow:auto不溢出(非JS/绝对定位)

解决方案:Flex布局实现自适应高度的滚动子容器

要实现你的需求,核心是利用Flex布局的flex-grow属性让第二个子容器自动填充父容器的剩余空间,同时确保父容器占满body的100%高度。以下是修正后的代码:

关键调整说明:

  • 给html和body设置height: 100%并清除默认边距,确保父容器能获取完整的视口高度。
  • 父容器添加height: 100%,配合flex-direction: column让子元素垂直排列。
  • 第二个子容器用flex: 1替代height: 100%,自动占据父容器剩余空间;同时保留overflow: auto,内容超出时自动显示滚动条。

完整代码:

HTML

<div class="homepage-parent">
   <div class="homepage-parent_child1">这里是动态内容,高度由内部元素决定</div>
   <div class="homepage-parent_child2">
     <!-- 示例大量内容,超出时会触发滚动 -->
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
     <p>测试内容</p>
   </div>
</div>

CSS

html, body {
  height: 100%;
  margin: 0; /* 清除默认边距,避免不必要的滚动条 */
}

.homepage-parent {
  width: 100%;
  height: 100%; /* 让父容器占满body的100%高度 */
  display: flex;
  flex-direction: column;
}

.homepage-parent_child1 {
  width: 100%;
  /* 高度由内部内容自动决定,无需额外设置 */
  background: #f0f0f0;
  padding: 1rem;
}

.homepage-parent_child2 {
  width: 100%;
  flex: 1; /* 自动填充父容器的剩余空间 */
  overflow: auto; /* 内容超出时显示滚动条 */
  background: #e0e0e0;
  padding: 1rem;
}

原代码问题分析:

原代码中父容器未设置height: 100%,无法继承body的高度;同时第二个子容器用height: 100%在Flex列布局中会尝试占满父容器全部高度,而非剩余空间,导致内容超出范围。flex:1则会让Flex引擎分配所有剩余可用空间,完美适配动态高度需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 10:18:19