2016-07-24 1 views
1

Когда моя навигационная панель сбрасывается, прокрутка в норме, и навигационная панель становится фиксированной в верхней части страницы при прокрутке заголовка/jumbotron. Однако, когда навигационная панель расширяется (раскрывая «один», «два» и «три»), страница будет перескакивать с некоторым содержимым и покрывать его навигационной панелью. Как заставить страницу прокручивать/вести себя «нормально» и разрешить расширенное навигационное исправление в верхней части страницы, не перескакивая через контент ниже?Как я могу сделать прокрутку navbar и зафиксировать ее в верхней части страницы при ее расширении?

<!DOCTYPE html> 
<html> 

<head> 
    <title>Example</title> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <link href="https://fonts.googleapis.com/css?family=Cabin" rel="stylesheet"> 
    <link href="https://fonts.googleapis.com/css?family=Lobster" rel="stylesheet"> 
    <script type="text/javascript"> 
    </script> 
    <style> 
     .affix { 
      top: 0; 
      width: 100%; 
     } 
     .affix + .container-fluid { 
      padding-top: 70px; 
     } 
     nav { 
      z-index: 9; 
     } 
     .emoji p:hover { 
      text-decoration: none; 
     } 
    </style> 
</head> 

<body> 
    <div class="container-fluid" style="background-color:#f64e09; color:#fff; height:200px;"> 
     <div class="container text-center" style="color: white;"> 
      <div> 
       <h1 style="font-family: 'Lobster', cursive;">Website</h1> </div> 
      <h1 style="font-size: 30px; font-family: 'Cabin', sans-serif;"> 

    </h1> </div> 
    </div> 
    <nav class="navbar navbar-inverse" data-spy="affix" data-offset-top="197"> 
     <div class="container-fluid"> 
      <div class="navbar-static-top"> 
       <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 id="navId" class="navbar-brand" style="color:white;" href="#">Navbar Title</a> </div> 
      <div class="collapse navbar-collapse" id="myNavbar"> 
       <ul class="nav navbar-nav"> 
        <li><a href="#">One</a> </li> 
        <li class="active"><a href="#">Two</a> </li> 
        <li><a href="#">Three</a> </li> 
       </ul> 
      </div> 
     </div> 
    </nav> 
    <!-- Start containter for everything south of navbar --> 
    <div class="container-fluid"> 
     <div class="container" style="padding-top: 20px;"> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> </div> 
    </div> 
    <div class="panel panel-default" style="font-family: 'Cabin', sans- serif;"> 
     <div class="panel-footer"> 
      <center> 
       <p>This is the footer</p> 
      </center> 
     </div> 
    </div> 
</body> 

</html> 

ответ

0

Как вы, наверное, знаете, почему ваш контент не «прыгает» в то время как Navbar свернут в этом стиле:

.affix + .container-fluid { 
    padding-top: 70px; 
} 

Но когда вы расширяете Navbar, утеплитель остается тем же самым, но сам навигатор становится выше. Итак, мы должны как-то отвлечься от этих ситуаций.

Мы можем добавить некоторые javascript добавить дополнительный класс в <nav> элемент:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var navBar = $('#myNavbar'); 
     $('.navbar-toggle').click(function(e) { 
      if (!navBar.is(':visible')) { 
       // #myNavbar is about to be shown, add extra class to parent <nav> 
       navBar.parents('nav').addClass('affix-visible-navbar'); 
      } else { 
       // #myNavbar is about to be hidden, remove extra class from parent <nav> 
       navBar.parents('nav').removeClass('affix-visible-navbar'); 
      } 
     }); 
    }); 
</script> 

и определить новый CSS-класс:

.affix.affix-visible-navbar + .container-fluid { 
    padding-top: 155px !important; 
} 

Так полный рабочий раствор будет выглядеть следующим образом:

<!DOCTYPE html> 
<html> 

<head> 
    <title>Example</title> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <link href="https://fonts.googleapis.com/css?family=Cabin" rel="stylesheet"> 
    <link href="https://fonts.googleapis.com/css?family=Lobster" rel="stylesheet"> 
    <script type="text/javascript"> 
    </script> 
    <style> 
     .affix { 
      top: 0; 
      width: 100%; 
     } 
     .affix + .container-fluid { 
      padding-top: 70px; 
     } 
     .affix.affix-visible-navbar + .container-fluid { 
      padding-top: 155px !important; 
     } 
     nav { 
      z-index: 9; 
     } 
     .emoji p:hover { 
      text-decoration: none; 
     } 
    </style> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var navBar = $('#myNavbar'); 
      $('.navbar-toggle').click(function(e) { 
       if (!navBar.is(':visible')) { 
        // #myNavbar is about to be shown, add extra class to parent <nav> 
        navBar.parents('nav').addClass('affix-visible-navbar'); 
       } else { 
        // #myNavbar is about to be hidden, remove extra class from parent <nav> 
        navBar.parents('nav').removeClass('affix-visible-navbar'); 
       } 
      }); 
     }); 
    </script> 
</head> 

<body> 
    <div class="container-fluid" style="background-color:#f64e09; color:#fff; height:200px;"> 
     <div class="container text-center" style="color: white;"> 
      <div> 
       <h1 style="font-family: 'Lobster', cursive;">Website</h1> </div> 
      <h1 style="font-size: 30px; font-family: 'Cabin', sans-serif;"> 

    </h1> </div> 
    </div> 
    <nav class="navbar navbar-inverse" data-spy="affix" data-offset-top="197"> 
     <div class="container-fluid"> 
      <div class="navbar-static-top"> 
       <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 id="navId" class="navbar-brand" style="color:white;" href="#">Navbar Title</a> </div> 
      <div class="collapse navbar-collapse" id="myNavbar"> 
       <ul class="nav navbar-nav"> 
        <li><a href="#">One</a> </li> 
        <li class="active"><a href="#">Two</a> </li> 
        <li><a href="#">Three</a> </li> 
       </ul> 
      </div> 
     </div> 
    </nav> 
    <!-- Start containter for everything south of navbar --> 
    <div class="container-fluid"> 
     <div class="container" style="padding-top: 20px;"> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> 
      <h1>Content so the page scrolls</h1> </div> 
    </div> 
    <div class="panel panel-default" style="font-family: 'Cabin', sans- serif;"> 
     <div class="panel-footer"> 
      <center> 
       <p>This is the footer</p> 
      </center> 
     </div> 
    </div> 
</body> 

</html> 

Конечно, если вы меняете #myNavbar элементов (например, добавить/удалить элементы), вы должны отрегулировать прокладку в .affix.affix-visible-navbar + .container-fluid {}

+0

Отлично работает, спасибо. – user3376899

+0

@ user3376899, чем upvote pls too =) – spirit

+0

Я сделал, но это не отображается, потому что я слишком новичок в пользователе. – user3376899

 Смежные вопросы

  • Нет связанных вопросов^_^