Margin в навигации по аффиксам Bootstrap

Я создал липкую панель навигации с помощью плагина Bootstrap Affix. Панель навигации находится под заголовком. При прокрутке страницы вниз, как только навигация достигает верха, она остается там. Работает нормально, пока все хорошо.

Однако что-то не работает, как я хочу. В тот момент, когда навигационная панель достигает вершины, ее положение меняется со «статического» на «фиксированное» (по понятным причинам). Следствием этого является то, что содержимое страницы под навигацией больше не может «видеть» панель навигации от одного прокручиваемого пикселя к другому. (Будучи фиксированным, он перемещается за пределы потока). Таким образом, с одного момента на другой содержимое страницы больше не видит нижнее поле навигации и принимает заголовок в качестве предшествующего элемента.

Следствием этого является то, что содержимое страницы внезапно пропускает несколько строк пикселей (количество, равное нижнему полю навигации) и делает «скачок».

См. скриншоты ниже: один прямо перед тем, как навигация достигает вершины (все еще статическая), и один сразу после того, как она достигла вершины (исправлено).

В целом я нахожу это очень понятным, CSS работает так, как и ожидалось. Однако это не то, что я хочу. Я хочу, чтобы содержимое страницы следовало нормальному движению прокрутки и не прыгало на некоторое расстояние.

Как я могу это изменить?

Навигация статическаяНавигация исправлена Заголовок

<body>
<header class="header container">
<h1>Header</h1>
<h2>Tagline</h2>
<img src="http://lorempixel.com/300/200" />
</header>
   <nav id="main-navigation" class="navbar">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Project name</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#about">About</a></li>
            <li><a href="#products">Products</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <div class="container">

      <section id="about">
      <h2>About</h2>
      <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec at velit eu leo semper pharetra vitae sed nisl. In elementum neque in urna elementum tristique. Sed malesuada risus justo, ut pellentesque enim vehicula vitae. Quisque a nunc et ligula sagittis ullamcorper. Proin eu faucibus eros, id iaculis felis. Praesent vitae dolor a quam accumsan egestas sit amet et sapien. Praesent tincidunt quam id vestibulum sollicitudin. Ut eget sem a diam tempus tempor. </p>
      <p>In elementum neque in urna elementum tristique. Sed malesuada risus justo, ut pellentesque enim vehicula vitae. Quisque a nunc et ligula sagittis ullamcorper. Proin eu faucibus eros, id iaculis felis. Praesent vitae dolor a quam accumsan egestas</p>
      <p>Nunc tempus egestas massa id cursus. Integer vehicula enim et lacus suscipit, at posuere ante ullamcorper. Mauris condimentum eros in luctus blandit. Nam at nibh dignissim libero dictum lacinia lacinia et neque. In viverra lorem id nulla aliquam, vel laoreet est porttitor. Sed congue tincidunt arcu eget cursus.<br />Quisque aliquam laoreet quam et maximus. Pellentesque maximus ullamcorper ante, a elementum est dapibus at. Nulla feugiat leo sed turpis convallis suscipit vel dictum sapien. Vivamus luctus id nulla sit amet fermentum. Praesent sodales viverra enim ut malesuada. Ut in elit bibendum, mollis dui nec, faucibus enim. Vivamus ullamcorper sed augue at lacinia.</p>
      </section>

       <section id="products">
      <h2>Products</h2>
      <p> Nunc mattis mauris quis diam dictum, non tristique diam congue. Vestibulum tincidunt augue a dui interdum facilisis. Donec sed neque id nunc ullamcorper porta quis vitae nibh. Quisque aliquam laoreet quam et maximus. Pellentesque maximus ullamcorper ante, a elementum est dapibus at. Nulla feugiat leo sed turpis convallis suscipit vel dictum sapien. Vivamus luctus id nulla sit amet fermentum. Praesent sodales viverra enim ut malesuada. Ut in elit bibendum, mollis dui nec, faucibus enim. Vivamus ullamcorper sed augue at lacinia. Nunc tempus egestas massa id cursus. Integer vehicula enim et lacus suscipit, at posuere ante ullamcorper. Mauris condimentum eros in luctus blandit. Nam at nibh dignissim libero dictum lacinia lacinia et neque. In viverra lorem id nulla aliquam, vel laoreet est porttitor. Sed congue tincidunt arcu eget cursus.<br />Quisque aliquam laoreet quam et maximus. Pellentesque maximus ullamcorper ante, a elementum est dapibus at. Nulla feugiat leo sed turpis convallis suscipit vel dictum sapien. Vivamus luctus id nulla sit amet fermentum. Praesent sodales viverra enim ut malesuada. Ut in elit bibendum, mollis dui nec, faucibus enim. Vivamus ullamcorper sed augue at lacinia. Nunc tempus egestas massa id cursus. Integer vehicula enim et lacus suscipit, at posuere ante ullamcorper. Mauris condimentum eros in luctus blandit.</p>
      <p>Curabitur posuere ornare enim. Nullam scelerisque vulputate risus, id consequat odio auctor interdum. Etiam eu ligula ut neque semper aliquam ut eget augue. Fusce in volutpat velit, sit amet gravida ipsum. Sed a consectetur nunc. Sed molestie scelerisque nunc nec pellentesque. Aliquam eget malesuada nulla, ut lobortis est.</p>
      </section>

    </div><!-- /.container -->
</body>
</html> 

CSS

    @import url("bootstrap/css/bootstrap.min.css");

nav#main-navigation.navbar {
    border-radius: 0;
    border: 0;
}

nav.affix {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    transform: translate3d(0px, 0px, 0px);
    z-index: 1030;
    width: 100%;    

person Toine    schedule 27.12.2014    source источник


Ответы (3)


Только что наткнулся на эту проблему ... Не уверен, что это поможет вам сейчас, но это обходной путь CSS, который хорошо работает для предотвращения «прыжка». Код css находится в стилусе, но вы понимаете...

Идея состоит в том, что панель аффиксов уже находится за пределами div navbar-wrapper, будучи абсолютно позиционированной, так что нет «прыжка», когда она изменяется на фиксированную. В поле margin-bottom останется место для интервала панели навигации. Обратите внимание, что navbar-wrapper имеет относительную позицию, поэтому абсолютная позиция класса аффикса будет относительной и отображаться в div.

.navbar-wrapper
 margin-bottom 45px
 position relative    
.affix-top
 position absolute
 top 0
 left 0
 z-index 100
.affix
 position fixed
 top 0

Надеюсь, это поможет кому-то.

person PM1    schedule 17.07.2015

Если это кажется одинаковым во всех браузерах, вы можете поместить

nav#main-navigation.navbar {
    border-radius: 0;
    border: 0;
    margin-top:-20px;
}

это немного переместит строку меню вверх, надеюсь, это решит вашу проблему

Ваше здоровье

person Naveen Kumar PG    schedule 27.12.2014
comment
К сожалению, это не работает. Для полноты картины я создал JSFiddle: jsfiddle.net/Gooly/escewot2 - person Toine; 27.12.2014
comment
здесь все выглядит нормально даже без исправления: jsfiddle.net/naveenkumarpg/escewot2/2 - person Naveen Kumar PG; 27.12.2014
comment
Он работает как надо, но содержимое страницы по-прежнему делает тот же «прыжок». Проверьте заголовок «О программе» в содержимом под навигацией. Как только навигация фиксируется наверху, она внезапно подпрыгивает. - person Toine; 27.12.2014

Исправление @Naveen может сработать, но как вы думаете, это семантическое исправление этой проблемы.

person Vikky    schedule 27.12.2014
comment
Викки, глядя на визуальные эффекты, я предлагаю это исправление. я не уверен, что именно вызывает разрыв в верхней части. если вы видите страницу в браузере, легко указать точное решение. - person Naveen Kumar PG; 27.12.2014