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

Bootstrap 4 fixed-top导航栏问题:禁止页面滚动、实现导航栏可滚动

解决Bootstrap 4 fixed-top导航栏的两个常见问题

针对你遇到的这两个导航栏问题,我整理了直接可用的解决方案,上手就能解决:

问题1:导航栏折叠时页面在后方滚动

这个问题的核心是导航栏展开时,页面的滚动行为没有被限制。我们可以借助Bootstrap折叠组件的内置事件,在菜单展开时给body添加禁止滚动的样式,收起时再移除这个限制。

解决方案(JS代码)

$(document).ready(function() {
  // 监听导航栏展开事件,禁止页面滚动
  $('#navbarTogglerDemo02').on('show.bs.collapse', function() {
    $('body').css('overflow', 'hidden');
  }).on('hide.bs.collapse', function() {
    // 导航栏收起后恢复页面滚动
    $('body').css('overflow', 'auto');
  });
});

问题2:折叠导航栏内容过多无法滚动,滚动时带动页面

这个问题需要给折叠后的导航栏容器设置专属的滚动规则,让菜单内容在自身范围内滚动,而不是触发页面整体滚动。

解决方案(CSS代码)

/* 仅在移动端折叠状态生效(对应navbar-expand-lg的断点) */
@media (max-width: 991px) {
  .navbar-collapse {
    max-height: calc(100vh - 56px); /* 减去导航栏头部默认高度56px,占满剩余屏幕 */
    overflow-y: auto; /* 内容超出时显示垂直滚动条 */
  }
}

/* 保留你原有的样式 */
.navbar-nav > li > a { padding:35px!important; }
p { padding-top:1000px; /* 模拟长页面 */ }

完整整合后的示例代码

把上面的CSS和JS整合到你的代码中,完整代码如下:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<style>
@media (max-width: 991px) {
  .navbar-collapse {
    max-height: calc(100vh - 56px);
    overflow-y: auto;
  }
}

.navbar-nav > li > a { padding:35px!important; }
p { padding-top:1000px; /* to emulate scroll */ }
</style>
<script>
$(document).ready(function() {
  $('#navbarTogglerDemo02').on('show.bs.collapse', function() {
    $('body').css('overflow', 'hidden');
  }).on('hide.bs.collapse', function() {
    $('body').css('overflow', 'auto');
  });
});
</script>
<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
 <div class="container">
 <a class="navbar-brand mx-auto" href="#">
 <img src="https://loremflickr.com/320/240" width="35" height="35" alt="logo">
 <span>Logo</span>
 </a>
 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
 <span class="navbar-toggler-icon"></span>
 </button>
 <div class="collapse navbar-collapse text-right" id="navbarTogglerDemo02">
 <ul class="navbar-nav ml-auto mt-2 mt-lg-0">
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 1</a>
 </li>
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 2</a>
 </li>
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 3</a>
 </li>
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 4</a>
 </li>
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 5</a>
 </li>
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 6</a>
 </li>
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 7</a>
 </li>
 <li class="nav-item main-nav">
 <a class="nav-link py-0 text-center" href="#">Link 8</a>
 </li>
 </ul>
 </div>
 </div>
</nav>
<p class="text-center"><strong>I am content at the bottom</strong></p>

这样两个问题就都解决了:菜单展开时页面不会在背后滚动,菜单内容过多时可以单独滚动菜单本身,不会带动页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:31:54