【问题标题】:Bootstrap sticky-top nav-bar is overlapping content when I use smooth scroll当我使用平滑滚动时,Bootstrap 置顶导航栏重叠内容
【发布时间】:2020-06-11 11:40:48
【问题描述】:

我已尝试修复此错误几天,但似乎没有谷歌搜索或旧答案可以解决此问题。

我已经添加了一个置顶导航栏,它位于我的身体内(在 jumbotron 英雄图像下方,也在身体内)。我添加了平滑滚动,一切正常。但是,当我单击一个链接并向下滚动时,它会将容器的开头与内容重叠。

我已经尝试按照我看到的建议在我的身体上添加 padding-top 和 margin,但它会将填充放在 jumbotron (.hero) 上方。然后我尝试将我的 jumbotron 和 nav 从正文中取出并将它们放在页眉中,这确实解决了重叠问题,但 nav 不再粘在页面顶部(这可能是它解决问题的原因!)

css 中似乎没有任何溢出会导致这种情况。

这是我第一次尝试编写代码,所以我的想法已经用完了。有人对为什么会发生这种情况有任何建议或理由吗?

我已经在 jsfiddle (https://jsfiddle.net/ahronpeskin/gbmsket1) 中设置了它,它似乎在我的 jumbotron 和导航栏之间添加了一个空白 - 平滑滚动不起作用,但单击链接有同样的问题。

HTML

<body data-spy="scroll" data-target="#navbarText">
   <!--hero image-->
  <div class="jumbotron jumbotron-fluid hero">
    <div class="container">
      <h1>Jill Peskin Counselling</h1>
      <p>
        Here for you when you need it most
      </p>
    </div>
    </div>

  <!--navbar-->
  <nav class="navbar sticky-top navbar-expand-md navbar-light bg-light">
    <a class="navbar-brand" href="#">Jill Peskin Counselling</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

      <div class="collapse navbar-collapse" id="navbarText">
      <ul class="navbar-nav mr-auto">
        <li class="nav-item">
          <a class="nav-link" href="#jill">Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#training">Training and Experience</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#contact">Contact Me</a>
        </li>
      </ul>
      <span class="navbar-text">
        Here for you when you need it most
      </span>
    </div>
  </nav>


CSS

body{
    position: relative;
}

/*hero image*/
.hero{
  background: url(Images/zen.jpg) fixed center no-repeat;
background-size: cover;
padding: 400px;
text-transform: none;
color:white;
margin-bottom: 0;
}

/*navbar*/

.sticky {
  position: fixed;
  top: 0;
  width: 100%;
}

【问题讨论】:

  • 您好,欢迎来到社区,您能在 jsfiddle 中重现该问题吗?以便正确检查和理解。
  • 对不起,您刚刚提供的小提琴链接上没有任何内容。
  • @GagandeepSingh - 谢谢我已经删除并重新添加了我的链接!我已将所有代码复制到 jsfiddle 中。它似乎在我的 jumbotron 和导航栏之间添加了一个空白区域 - 平滑滚动不起作用,但单击链接有同样的问题。 (jsfiddle.net/ahronpeskin/gbmsket1)
  • 请将 jsfiddle URL 移到原帖正文中。

标签: html css nav sticky smooth-scrolling


【解决方案1】:

使用普通的缩小 JQuery 代替 JQuery-Slim。

然后进行平滑滚动。

这里:

  <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  <script
    src="https://code.jquery.com/jquery-3.5.1.min.js"
    integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
    crossorigin="anonymous">
    </script> 

  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>

  <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>

<!--smooth scroll-->
    <script src="js/smooth-scroll.polyfills.min.js"></script>
    <script>
      $(document).on('click', 'a.nav-link', function (event) {
          event.preventDefault();
          console.log("CLICKED ANCHOR!");

          $('html, body').animate({
              scrollTop: $($.attr(this, 'href')).offset().top - $(".navbar.sticky-top").height()
          }, 500);
      });
    </script>

这基本上会监听 a.nav-link 上的点击,防止默认行为, 计算从顶部的偏移量并减去导航本身的高度

如果您有任何其他问题,请询问

【讨论】:

  • 谢谢@antax - 这解决了我的重叠问题。我有两个问题。首先,它现在使我的 scrollspy 稍微偏离了(我的偏移量约为 56px),但现在我不知道如何将它添加到 JS 中。其次,我应该一直使用缩小版吗?我认为我使用的是 slim 而不是 slim,因为 youtube 教程是这样说的,但没有真正的理由。
  • 嘿抱歉回复晚了,我忘了在他们的js $('body').scrollspy({ target: '#navbarText',offset: 56 }) 中添加scrollspy 脚本,这只是您添加的内容,只需添加即可。 Scrollspy 与平滑滚动无关。是的,您应该使用缩小版本。苗条版本也很可能被缩小,只是它没有完整的库所具有的所有功能。但是对于 .animate() 你需要正常的缩小版而不是苗条的缩小版。您还可以为偏移量添加数据属性(下一个评论链接)
  • 感谢@antax - 我设法将数据属性添加到解决了我的问题的正文标签。很高兴知道缩小和苗条之间的区别。为什么有人会使用超薄版本?有什么好处?
  • 嘿,太好了!一旦你掌握了窍门,东西就很容易了:) Slim 版的好处是它比完整版小得多。祝你有美好的一天
猜你喜欢
  • 2017-07-07
  • 2015-04-13
  • 1970-01-01
  • 2017-06-18
  • 2013-12-22
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多