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

Bootstrap 4:实现占剩余高度、可按钮滚动的无滚动条行

嘿,我来帮你搞定这个Bootstrap 4的布局问题!刚好之前做过类似需求,用Bootstrap本身的flex布局体系加上一点CSS和JS就能完美实现,来看看具体怎么做:

实现Bootstrap 4填充剩余高度的可滚动Row

核心布局实现

首先得利用Bootstrap 4的flex特性来让目标row占满页面剩余高度,层级设置很关键:

  • 给最外层容器(比如<body>或者包裹的父div)加上h-100 d-flex flex-column,确保它占满整个视口高度,且子元素按垂直方向排列。
  • 页面上方的固定内容(比如导航、标题)保持默认,它们会自动占据自身高度。
  • 包裹目标row的容器添加flex-grow-1 overflow-hidden——flex-grow-1会让这个容器“吃掉”页面剩下的所有高度,overflow-hidden则能防止内容溢出到页面外。
  • 在row内部的内容区,设置overflow-y-auto让内容超出时自动出现垂直滚动,之后再用CSS隐藏滚动条。

隐藏滚动条的兼容CSS

不同浏览器的滚动条样式需要单独处理,这段代码能覆盖主流浏览器:

.scroll-content {
  overflow-y: auto;
  /* IE 和 Edge */
  -ms-overflow-style: none;
  /* Firefox */
  scrollbar-width: none;
}
/* Chrome、Safari、Opera */
.scroll-content::-webkit-scrollbar {
  display: none;
}

按钮控制滚动的JS逻辑

给上下滚动按钮绑定点击事件,控制内容容器的滚动位置,还能加上平滑滚动的动画效果:

const scrollContent = document.querySelector('.scroll-content');
const scrollUpBtn = document.querySelector('#scroll-up');
const scrollDownBtn = document.querySelector('#scroll-down');

scrollUpBtn.addEventListener('click', () => {
  // 每次向上滚动50px,带平滑动画
  scrollContent.scrollTo({
    top: scrollContent.scrollTop - 50,
    behavior: 'smooth'
  });
});

scrollDownBtn.addEventListener('click', () => {
  scrollContent.scrollTo({
    top: scrollContent.scrollTop + 50,
    behavior: 'smooth'
  });
});

完整可运行代码示例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Bootstrap 4 Full Height Scroll Row</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
  <style>
    html, body {
      height: 100%;
      margin: 0;
    }
    .scroll-content {
      overflow-y: auto;
      -ms-overflow-style: none;
      scrollbar-width: none;
    }
    .scroll-content::-webkit-scrollbar {
      display: none;
    }
  </style>
</head>
<body class="h-100 d-flex flex-column">
  <!-- 顶部固定内容 -->
  <header class="bg-primary text-white p-3">
    <h2>顶部标题栏</h2>
  </header>

  <!-- 占满剩余高度的容器 -->
  <div class="flex-grow-1 overflow-hidden">
    <div class="container-fluid h-100">
      <div class="row h-100">
        <!-- 左侧控制栏 -->
        <div class="col-3 bg-secondary text-white p-3">
          <button id="scroll-up" class="btn btn-block btn-light mb-3">向上滚动</button>
          <button id="scroll-down" class="btn btn-block btn-light">向下滚动</button>
        </div>
        <!-- 右侧内容滚动区 -->
        <div class="col-9 bg-light">
          <div class="scroll-content h-100 p-4">
            <!-- 测试用的大量内容 -->
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <p>测试内容行</p>
            <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>
      </div>
    </div>
  </div>

  <script>
    const scrollContent = document.querySelector('.scroll-content');
    const scrollUpBtn = document.querySelector('#scroll-up');
    const scrollDownBtn = document.querySelector('#scroll-down');

    scrollUpBtn.addEventListener('click', () => {
      scrollContent.scrollTo({
        top: scrollContent.scrollTop - 50,
        behavior: 'smooth'
      });
    });

    scrollDownBtn.addEventListener('click', () => {
      scrollContent.scrollTo({
        top: scrollContent.scrollTop + 50,
        behavior: 'smooth'
      });
    });
  </script>
</body>
</html>

关键细节提醒

  • flex层级要连贯:从最外层的html/body到内容容器,每个层级的高度和flex属性都要设置正确,不然剩余高度的计算会出错。
  • overflow的组合使用:父容器的overflow-hidden是为了避免内容溢出导致页面出现全局滚动条,子容器的overflow-y-auto则让内部内容独立滚动。
  • 滚动条隐藏的兼容性:不要只写webkit的样式,要兼顾Firefox和IE/Edge,不然在某些浏览器还是会看到滚动条。

这样调整后,你的row就能完美填充页面剩余高度,内容不会超出分配空间,点击按钮还能平滑滚动,滚动条也会被隐藏起来~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:41