Исправлена навигация по боковой панели в жидком твиттере при загрузке 2.0

92

Возможно ли, чтобы перемещение боковой панели всегда фиксировалось при прокрутке в макете жидкости?

Теги:
css-position
fluid-layout

7 ответов

176
Лучший ответ

Примечание.. Существует плагин bootstrap jQuery, который делает это и многое другое, что было представлено несколько версий после того, как этот ответ был написан (почти два года назад) под названием Affix. Этот ответ применяется только в том случае, если вы используете Bootstrap 2.0.4 или ниже.


Да, просто создайте новый фиксированный класс для боковой панели и добавьте класс смещения в ваш div для того, чтобы компенсировать левое поле, например:

CSS

.sidebar-nav-fixed {
    padding: 9px 0;
    position:fixed;
    left:20px;
    top:60px;
    width:250px;
}

.row-fluid > .span-fixed-sidebar {
    margin-left: 290px;
}

Демо: http://jsfiddle.net/U8HGz/1/show/ Редактировать здесь: http://jsfiddle.net/U8HGz/1/

Обновление

Исправлено мое демо, чтобы поддерживать отзывчивый загрузочный лист, теперь он течет с отзывчивой функцией бутстрапа.

Примечание. Эта демонстрация протекает с верхней фиксированной навигационной панелью, поэтому оба элемента становятся position:static при изменении размера экрана, я разместил еще одну демонстрационную версию ниже, которая поддерживает фиксированную боковую панель, пока экран не снизится для мобильного просмотра.

CSS

.sidebar-nav-fixed {
     position:fixed;
     top:60px;
     width:21.97%;
 }

 @media (max-width: 767px) {
     .sidebar-nav-fixed {
         width:auto;
     }
 }

 @media (max-width: 979px) {
     .sidebar-nav-fixed {
         position:static;
        width: auto;
     }
 }

HTML

<div class="container-fluid">
<div class="row-fluid">
 <div class="span3">
   <div class="well sidebar-nav sidebar-nav-fixed">
    ...
   </div><!--/.well -->
 </div><!--/span-->
 <div class="span9">
    ...
 </div><!--/span-->
</div><!--/row-->

</div><!--/.fluid-container-->

Демо, отредактируйте здесь.

второстепенное примечание: разница ширины фиксированной боковой панели составляет 10px/1%, что связано с тем, что, поскольку она не наследует ширину от div контейнера span3, поскольку она фиксирована я приходилось придумывать ширину. Это достаточно близко.

И вот еще один метод, если вы хотите, чтобы боковая панель была зафиксирована до тех пор, пока сетка не опустится для просмотра маленького экрана/мобильного устройства.

CSS

.sidebar-nav-fixed {
    position:fixed;
    top:60px;
    width:21.97%;
}

@media (max-width: 767px) {
    .sidebar-nav-fixed {
        position:static;
        width:auto;
    }
}

@media (max-width: 979px) {
    .sidebar-nav-fixed {
        top:70px;
    }
}

Демо, отредактируйте здесь.

  • 0
    Для меня как в Chrome, так и в Firefox, эта скрипка всегда имеет горизонтальную полосу прокрутки (Chrome) шириной менее ~ 1016 пикселей. (Легче увидеть здесь: jsfiddle.net/U8HGz/130/show, который равен просто / 1, но отображает ширину и высоту окна ниже «Hello World; я не знаю, что такое / 2 - / 129.)
  • 1
    @TJCrowder из-за объявления margin-left:290px в классе .span-fixed-sidebar панель. Если ее там нет, содержимое будет перекрывать боковую панель на экранах меньшего размера. Вы можете исключить горизонтальную полосу прокрутки, явно скрыв ее в теге body , например: body { overflow-x: hidden; }
Показать ещё 19 комментариев
48

В последнем Boostrap (2.1.0) есть новая функция "аффикса" JS специально для этого типа приложений, FYI.

  • 12
    twitter.github.com/bootstrap/javascript.html#affix
  • 2
    Это должен быть принятый ответ. Спасибо.
Показать ещё 1 комментарий
28

это испортит отзывчивый Webdesign. Лучше оберните фиксированную боковую панель в запросе на медиа.

CSS

@media (min-width: 768px) { 
  .sb-fixed{
    position: fixed;
  } 
}

HTML

<div class="span3 sb-fixed">
   <div class="well sidebar-nav">
      <!-- Sidebar Contents -->
   </div>
</div>

Теперь боковая панель фиксирована, если точка просмотра больше 768 пикселей.

  • 0
    Это было великолепно, ура!
  • 0
    красиво и элегантно Спасибо
1

Это невозможно без javascript. Я считаю affix.js слишком сложным, поэтому я предпочитаю использовать:

stickyfloat

0

В текущей версии Bootstrap (3.3.2) есть хороший способ добиться фиксированной боковой панели для навигации.

Это решение также хорошо работает с повторно введенным классом контейнера-жидкости, что означает, что легко получить гибкую полноэкранную компоновку.

Обычно вам нужно использовать фиксированные ширины и поля, или навигация будет перекрывать содержимое, но с помощью пустого столбца-заполнителя содержимое всегда будет располагаться в нужном месте.

Нижеприведенная настройка обертывает содержимое при изменении размера окна до 768 пикселей и освобождает фиксированную навигацию.

См. http://www.bootply.com/ePvnTy1VII для рабочего примера.

CSS

@media (min-width: 767px) { 
    #navigation{
        position: fixed;
    }
}

HTML

<div class="container-fluid">
 <div class="row">
  <div id="navigation" class="col-lg-2 col-md-3 col-sm-3">
    <ul>
      <li><a href="#">Link 1</a></li>
      <li><a href="#">Link 1</a></li>
      <li><a href="#">Link 1</a></li>
    </ul>
  </div>

  <div class="col-lg-2 col-md-3 col-sm-3 hidden-xs">
    <!-- Placeholder - keep empty -->
  </div> 

  <div id="main" class="col-lg-10 col-md-9 col-sm-9 fill">
     ...
     Huge Content
     ...
  </div> 
 </div>
</div>
0

Очень легко получить исправление nav или все теги, которые вы хотите. Все, что вам нужно, это написать свой тег fix, как этот, и поместить его в раздел вашего тела.

   <div style="position: fixed">
       test - try  scroll again. 
   </div>
0

Я начал с ответов Андреса и в итоге получил липкую боковую панель:

HTML:

<div class="span3 sidebar-width">
  <div class="well sidebar-nav-fixed">
    Sidebar
  </div>
</div>

<div class="span9 span-fixed-sidebar">
  Content
</div> <!-- /span -->

CSS

.sidebar-nav-fixed {
  position:fixed;
}

JS/JQuery:

sidebarwidth = $(".sidebar-width").css('width');
$('.sidebar-nav-fixed').css('width', sidebarwidth);
contentmargin = parseInt(sidebarwidth) + 60;
$('.span-fixed-sidebar').css('marginLeft', contentmargin);

Я предполагаю, что мне также нужна JS для обновления переменной "sidebarwidth" при изменении размера окна просмотра.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню