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

如何让div占满可滚动容器的整个滚动区域高度

实现方案

核心逻辑:当前布局存在两个核心问题:一是绝对定位的event元素脱离文档流,无法撑开滚动容器的内容高度;二是header同时作为滚动容器和flex容器时,直接子元素grid的高度默认仅匹配header的可视高度,无法跟随滚动区域自动拉伸。

第一步:调整DOM结构

在header内部新增一个滚动内容容器,把所有grid、event元素都移入该容器内:

<header>
  <!-- 新增内层滚动内容容器 -->
  <div class="scroll-wrapper">
    <div class="grid"></div>
    <div class="grid"></div>
    <div class="grid"></div>
    <div class="event event-1">1</div>
    <div class="event event-2">2</div>
  </div>
</header>

第二步:调整CSS样式

header {
  border: 1px solid #000;
  height: 70px;
  width: 300px;
  overflow-y: scroll;
  box-sizing: border-box;
}

.scroll-wrapper {
  /* 高度设置为你需要的滚动区域总高度,示例里两个event总高度为100px,可根据实际内容调整 */
  height: 100px;
  width: 100%;
  display: flex;
  position: relative;
}

.grid {
  border: 1px solid green;
  flex-grow: 1;
}

.event {
  position: absolute;
  border: 1px solid red;
  height: 50px;
  padding: 0;
  width: 92px;
  background: rgba(200,0,0, 0.05)
}

.event-2 {
  transform: translateY(100%)
}

动态高度适配

如果event的数量、高度是动态生成的,可通过JS计算所有event元素的最大底部位置,赋值给.scroll-wrapper的height属性即可:

const wrapper = document.querySelector('.scroll-wrapper')
const events = document.querySelectorAll('.event')
let maxBottom = 0
events.forEach(el => {
  const rect = el.getBoundingClientRect()
  const bottom = rect.top - wrapper.getBoundingClientRect().top + rect.height
  maxBottom = Math.max(maxBottom, bottom)
})
wrapper.style.height = `${maxBottom}px`

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 11:45:03