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

如何设置scroll-menu容器仅占剩余空间且仅自身滚动?

实现固定Header+剩余高度可滚动容器的布局

需求说明

要让overall-container占满整个屏幕且不可滚动,顶部Header始终保持可见,下方的scroll-menu自动占据剩余屏幕高度,内容超出时自动滚动。原代码中scroll-menu用固定高度100px无法满足需求,需要调整CSS实现自适应剩余高度。


方法1:Flexbox(最推荐,简洁灵活)

Flexbox是实现这种布局的最优方案,不需要手动计算高度,自动适配Header的动态高度。

修改后的CSS代码:

.overall-container {
  height: 100vh; /* 用标准的100vh代替非标准的screen值,占满视口高度 */
  border: 1px solid black;
  padding: 2px;
  display: flex;
  flex-direction: column; /* 子元素垂直排列 */
  box-sizing: border-box; /* 确保padding不额外增加容器总高度 */
}

/* 给Header加个类方便样式控制(可选,但更清晰) */
.header {
  padding: 8px;
  border: 1px solid gray;
  margin-bottom: 8px; /* 与下方菜单拉开间距 */
}

.scroll-menu {
  overflow-y: auto; /* 内容超出时垂直滚动 */
  border: 1px solid blue;
  padding: 2px;
  flex-grow: 1; /* 自动占据容器剩余的所有空间 */
}

对应的HTML调整(给Header添加类):

<div class="overall-container">
  <div class="header">
    Header
  </div>
  <div class="scroll-menu">
    <div>Element 1</div>
    <div>Element 2</div>
    <div>Element 3</div>
    <div>Element 4</div>
    <div>Element 5</div>
    <div>Element 6</div>
    <div>Element 7</div>
    <div>Element 8</div>
    <div>Element 9</div>
    <div>Element 10</div>
    <div>Element 11</div>
    <div>Element 12</div>
    <div>Element 1</div>
    <div>Element 2</div>
    <div>Element 3</div>
    <div>Element 4</div>
    <div>Element 5</div>
    <div>Element 6</div>
    <div>Element 7</div>
    <div>Element 8</div>
    <div>Element 9</div>
    <div>Element 10</div>
    <div>Element 11</div>
    <div>Element 12</div>
    <div>Element 1</div>
    <div>Element 2</div>
    <div>Element 3</div>
    <div>Element 4</div>
    <div>Element 5</div>
    <div>Element 6</div>
  </div>
</div>

方法2:Grid布局(同样灵活)

Grid布局也能轻松实现,通过定义行高分配空间。

CSS代码:

.overall-container {
  height: 100vh;
  border: 1px solid black;
  padding: 2px;
  display: grid;
  grid-template-rows: auto 1fr; /* 第一行自适应Header高度,第二行占剩余空间 */
  gap: 8px; /* 控制Header和菜单的间距 */
  box-sizing: border-box;
}

.header {
  padding: 8px;
  border: 1px solid gray;
}

.scroll-menu {
  overflow-y: auto;
  border: 1px solid blue;
  padding: 2px;
}

HTML和方法1一致,效果完全相同。


方法3:calc计算高度(不推荐,灵活性差)

如果不想用Flex/Grid,可以手动计算scroll-menu的高度,但需要固定Header的高度,一旦Header高度变化就得重新修改数值。

CSS代码:

.overall-container {
  height: 100vh;
  border: 1px solid black;
  padding: 2px;
  box-sizing: border-box;
}

.header {
  height: 48px; /* 固定Header的总高度(含padding) */
  padding: 8px;
  border: 1px solid gray;
  box-sizing: border-box;
  margin-bottom: 8px;
}

.scroll-menu {
  overflow-y: auto;
  border: 1px solid blue;
  padding: 2px;
  /* 总视口高度减去Header高度、容器padding、间距 */
  height: calc(100vh - 48px - 4px - 8px); 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:09:15