将Bootstrap固定导航栏的底部对齐到div的顶部

时间:2017-12-25 15:40:06

标签: html css twitter-bootstrap

我的页面顶部有一个固定的导航栏和一个带有动画滚动的滚动设置。但是,当我单击导航链接时,页面会滚动到导航栏的 top 与锚定div top 对齐的位置。我希望导航栏的 bottom 与锚定的div top 对齐,以便不覆盖该锚定div中的任何内容}。我怎么能这样做?

就我的代码而言,我从this example from W3schools.

开始

1 个答案:

答案 0 :(得分:2)

要滚动每个部分的顶部而不是50px的额外偏移,您可以从这两个部分中减去50:

$('html, body').animate({
        scrollTop: $(hash).offset().top-50
      }, 800, function(){

        // Add hash (#) to URL when done scrolling (default click behavior)
        window.location.hash = hash-50;
      });

原始片段:(从顶部向上滚动至50)



<!DOCTYPE html>
<html>

<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <style>
    body {
      position: relative;
    }
    
    #section1 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #1E88E5;
    }
    
    #section2 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #673ab7;
    }
    
    #section3 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #ff9800;
    }
    
    #section41 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #00bcd4;
    }
    
    #section42 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #009688;
    }
  </style>
</head>

<body>

  <nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>                        
      </button>
        <a class="navbar-brand" href="#">WebSiteName</a>
      </div>
      <div>
        <div class="collapse navbar-collapse" id="myNavbar">
          <ul class="nav navbar-nav">
            <li><a href="#section1">Section 1</a></li>
            <li><a href="#section2">Section 2</a></li>
            <li><a href="#section3">Section 3</a></li>
            <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Section 4 <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="#section41">Section 4-1</a></li>
                <li><a href="#section42">Section 4-2</a></li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </div>
  </nav>

  <div id="section1" class="container-fluid">
    <h1>Section 1</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section2" class="container-fluid">
    <h1>Section 2</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section3" class="container-fluid">
    <h1>Section 3</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section41" class="container-fluid">
    <h1>Section 4 Submenu 1</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section42" class="container-fluid">
    <h1>Section 4 Submenu 2</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>

  <script>
    $(document).ready(function() {
      // Add scrollspy to <body>
      $('body').scrollspy({
        target: ".navbar",
        offset: 50
      });

      // Add smooth scrolling on all links inside the navbar
      $("#myNavbar a").on('click', function(event) {
        // Make sure this.hash has a value before overriding default behavior
        if (this.hash !== "") {
          // Prevent default anchor click behavior
          event.preventDefault();

          // Store hash
          var hash = this.hash;

          // Using jQuery's animate() method to add smooth page scroll
          // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area
          $('html, body').animate({
            scrollTop: $(hash).offset().top
          }, 800, function() {

            // Add hash (#) to URL when done scrolling (default click behavior)
            window.location.hash = hash;
          });
        } // End if
      });
    });
  </script>

</body>

</html>
&#13;
&#13;
&#13;

修订后的片段:(滚动到每个部分的顶部)

&#13;
&#13;
<!DOCTYPE html>
<html>

<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <style>
    body {
      position: relative;
    }
    
    #section1 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #1E88E5;
    }
    
    #section2 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #673ab7;
    }
    
    #section3 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #ff9800;
    }
    
    #section41 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #00bcd4;
    }
    
    #section42 {
      padding-top: 50px;
      height: 500px;
      color: #fff;
      background-color: #009688;
    }
  </style>
</head>

<body>

  <nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>                        
      </button>
        <a class="navbar-brand" href="#">WebSiteName</a>
      </div>
      <div>
        <div class="collapse navbar-collapse" id="myNavbar">
          <ul class="nav navbar-nav">
            <li><a href="#section1">Section 1</a></li>
            <li><a href="#section2">Section 2</a></li>
            <li><a href="#section3">Section 3</a></li>
            <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Section 4 <span class="caret"></span></a>
              <ul class="dropdown-menu">
                <li><a href="#section41">Section 4-1</a></li>
                <li><a href="#section42">Section 4-2</a></li>
              </ul>
            </li>
          </ul>
        </div>
      </div>
    </div>
  </nav>

  <div id="section1" class="container-fluid">
    <h1>Section 1</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section2" class="container-fluid">
    <h1>Section 2</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section3" class="container-fluid">
    <h1>Section 3</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section41" class="container-fluid">
    <h1>Section 4 Submenu 1</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>
  <div id="section42" class="container-fluid">
    <h1>Section 4 Submenu 2</h1>
    <p>Click on the different Section links in the navbar to see the smooth scrolling effect.</p>
  </div>

  <script>
    $(document).ready(function() {
      // Add scrollspy to <body>
      $('body').scrollspy({
        target: ".navbar",
        offset: 50
      });

      // Add smooth scrolling on all links inside the navbar
      $("#myNavbar a").on('click', function(event) {
        // Make sure this.hash has a value before overriding default behavior
        if (this.hash !== "") {
          // Prevent default anchor click behavior
          event.preventDefault();

          // Store hash
          var hash = this.hash;

          // Using jQuery's animate() method to add smooth page scroll
          // The optional number (800) specifies the number of milliseconds it takes to scroll to the specified area
          $('html, body').animate({
            scrollTop: $(hash).offset().top - 50
          }, 800, function() {

            // Add hash (#) to URL when done scrolling (default click behavior)
            window.location.hash = hash - 50;
          });
        } // End if
      });
    });
  </script>

</body>

</html>
&#13;
&#13;
&#13;