【问题标题】:Bootstrap 3 - How do I make the nav bar sticky on scroll [duplicate]Bootstrap 3 - 如何使导航栏在滚动时保持粘性[重复]
【发布时间】:2017-06-04 19:25:25
【问题描述】:

我想要做的是让导航栏在您滚动过去时停留在页面顶部。由于我对 JavaScript 很陌生,所以我看了一些教程,但是,没有一个真正适用于 Bootstrap 导航栏。我只是想知道是否有办法做到这一点,以便它与 Bootstrap 列一起使用。

另外,我怎样才能让它在滚动时背景颜色开始淡入?

这里是导航栏的 HTML 代码,如果有帮助的话:

   <div class="container">
    <nav class="navbar navbar-default" id="mNavbar">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false" id="toggle">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
        </div>

        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav">
            <li><a href="#">Home</a></li>
            <li><a href="#section2">Services</a></li>
            <li><a href="#section3">Contact</a></li>
          </ul>
        </div>
      </div>
    </nav>
  </div>

【问题讨论】:

  • 您的导航栏是否直接位于页面顶部?因为也许您可以只使用 position:fixed 导航而不需要 javascript?
  • @Zze 在页面顶部下方约60px。

标签: css html twitter-bootstrap twitter-bootstrap-3


【解决方案1】:

Bootstrap 3 有一个 .navbar-fixed-top 类,可应用于 nav 元素以固定到页面顶部。它适用于不同屏幕尺寸的所有基本导航栏功能。官方documentation有一个例子。

&lt;nav class="navbar navbar-default navbar-fixed-top" id="mNavbar"&gt;

如果您需要它在距屏幕顶部一定数量的像素处变得粘滞,那么您需要将滚动事件处理程序附加到页面。然后,您将检查页面滚动的距离,然后应用固定导航类或设置样式以固定到特定位置。像这样的:

$(document).ready(function() {
  var $navbar = $("#mNavbar");
  
  AdjustHeader(); // Incase the user loads the page from halfway down (or something);
  $(window).scroll(function() {
      AdjustHeader();
  });
  
  function AdjustHeader(){
    if ($(window).scrollTop() > 60) {
      if (!$navbar.hasClass("navbar-fixed-top")) {
        $navbar.addClass("navbar-fixed-top");
      }
    } else {
      $navbar.removeClass("navbar-fixed-top");
    }
  }
});
body{
  position: relative;
  display: block;
  height: 1000px;
  overflow-y: scroll;
}

.navbar{
  top: 60px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<div class="container">
  <nav class="navbar navbar-default" id="mNavbar">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false" id="toggle">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
      </div>

      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav">
          <li><a href="#">Home</a>
          </li>
          <li><a href="#section2">Services</a>
          </li>
          <li><a href="#section3">Contact</a>
          </li>
        </ul>
      </div>
    </div>
  </nav>
</div>

我不确定您将填充添加到顶部和底部是什么意思,但是您可以通过在 Bootstrap 版本之后将 .navbar-fixed-top 添加到样式表并更新填充值来覆盖 CSS。可能有一个top CSS 值将导航栏从屏幕顶部移开,您可以通过将top 设置为0 来解决该问题。

【讨论】:

  • 很好的解决方案,除非导航栏位于屏幕顶部,并且他们希望在滚动过去后将其粘住,比如在页面中间或其他地方
  • 根据新评论,距离顶部大约 60px。
  • 我也许应该说这是问题所在。我改编了其中一个教程,基本上当窗口超过导航栏顶部时,它添加了 navbar-fixed-top 类,但是它在顶部和底部添加了填充。有没有办法保留原来的填充?
  • @Zze 出于某种原因,这段代码对我不起作用。该类未添加到导航栏。有什么想法吗?
  • @name234 我稍微调整了代码。 sn-p 现在可以更好地显示 Alexander 的工作示例。看看这是否适合你。
【解决方案2】:

要使其向下滚动,请将 navbar-fixed-top 添加到您的导航标签,这里的问题是它会像这样卡在页面顶部

<nav class="navbar navbar-default navbar-fixed-top" id="mNavbar">

https://jsfiddle.net/nyd7sd1q/

【讨论】:

  • 我的解决方案和alexanders基本一样。如果您希望将其固定但不希望在您的 css 中处于顶部,请执行 #mNavbar{position:fixed!important;}
猜你喜欢
  • 2013-07-15
  • 2017-08-12
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多