2012-04-25 3 views
2

Я использую twitter bootstrap, и моя панель навигации отлично работает с функцией коллапса.subnav bar рухнул с twitter bootstrap

Это мой HTML-код:

<div class="subnav"> 
    <ul class="nav nav-pills"> 
     <li class="dropdown"> 
     <a href="#" data-toggle="dropdown" class="dropdown-toggle">Buttons <b class="caret"></b></a> 
     <ul class="dropdown-menu"> 
      <li class=""><a href="#buttonGroups">Button groups</a></li> 
      <li class=""><a href="#buttonDropdowns">Button dropdowns</a></li> 
     </ul> 
     </li> 
     <li class="dropdown"> 
     <a href="#" data-toggle="dropdown" class="dropdown-toggle">Navigation <b class="caret"></b></a> 
     <ul class="dropdown-menu"> 
      <li class=""><a href="#navs">Nav, tabs, pills</a></li> 
      <li class=""><a href="#navbar">Navbar</a></li> 
      <li class=""><a href="#breadcrumbs">Breadcrumbs</a></li> 
      <li class=""><a href="#pagination">Pagination</a></li> 
     </ul> 
     </li> 
     <li class=""><a href="#labels">Labels</a></li> 
     <li class=""><a href="#badges">Badges</a></li> 
     <li class=""><a href="#typography">Typography</a></li> 
     <li class=""><a href="#thumbnails">Thumbnails</a></li> 
     <li class=""><a href="#alerts">Alerts</a></li> 
     <li><a href="#progress">Progress bars</a></li> 
     <li><a href="#misc">Miscellaneous</a></li> 
    </ul> 
    </div> 

Это мой bootstrap_and_overrides.css.scss

$iconSpritePath: asset-url('glyphicons-halflings.png', image); 
$iconWhiteSpritePath: asset-url('glyphicons-halflings-white.png', image); 
@import "bootstrap"; 
body { padding-top: 40px; 
     .navbar .brand {padding: 10px 20px; } 
     background: url("background.png") repeat scroll 0 0 #EEEEEE; 


.subnav { 
    background-color: #EEEEEE; 
    background-repeat: repeat-x; 
    border: 1px solid #E5E5E5; 
    border-radius: 4px 4px 4px 4px; 
    height: 36px; 



      .nav > li > a { 
         border-left: 1px solid #F5F5F5; 
         border-radius: 0 0 0 0; 
         border-right: 1px solid #E5E5E5; 
         margin: 0; 
         padding-bottom: 11px; 
         padding-top: 11px; 
         } 
    } 

    .subnav-fixed { 
    /*important part*/ 
    left: 0; 
    position: fixed; 
    right: 0; 
    top: 40px; 
    z-index: 1020; 
    /*design stuff*/ 
    border-color: #D5D5D5; 
    border-radius: 0 0 0 0; 
    border-width: 0 0 1px; 
    box-shadow: 0 1px 0 #FFFFFF inset, 0 1px 5px rgba(0, 0, 0, 0.1); 
    background-color: #FFFFFF; 
    } 
} 
@import "bootstrap-responsive"; 

и это мой JS код:

$(document).scroll(function(){ 
    // If has not activated (has no attribute "data-top" 
    if (!$('.subnav').attr('data-top')) { 
     // If already fixed, then do nothing 
     if ($('.subnav').hasClass('subnav-fixed')) return; 
     // Remember top position 
     var offset = $('.subnav').offset() 
     $('.subnav').attr('data-top', offset.top); 
    } 

    if ($('.subnav').attr('data-top') - $('.subnav').outerHeight() <= $(this).scrollTop()) 
     $('.subnav').addClass('subnav-fixed'); 
    else 
     $('.subnav').removeClass('subnav-fixed'); 
}); 

Кроме того, я использую subnav bar, моя проблема в том, что мой subnav bar не рухнул.

Правильная версия subnav бар в Twitter Bootstrap:

fine subnav twitter bootstrap

Моя плохая версия, что он не работает нормально:/

bad subnav twitter bootstrap

Как я могу исправить эту проблему?

Спасибо!

+0

Можете ли вы предоставить код? Живая рабочая демонстрация была бы лучшей, но по крайней мере предоставила html и css для вашего меню. Не видя никакого кода, вы получите только дикие догадки. – Jrod

+0

Спасибо, Jrod, я добавил код html, css и js: D – hyperrjas

+0

@Jrod Я добавил исправление для этой проблемы в ответ. С уважением! – hyperrjas

ответ

2

Если у вас есть эта проблема, вы можете решить эту проблему с этим:

В вашем файла JavaScript вы должны добавить этот Jquery код:

//subnav config 
$(function(){ 

    var $win = $(window); 
    var $nav = $('.subnav'); 
    var navTop = $('.subnav').length && $('.subnav').offset().top - 38; 
    var isFixed = 0; 

    processScroll(); 

    $win.on('scroll', processScroll); 

    function processScroll() { 
     console.log('test'); 
     var i, scrollTop = $win.scrollTop(); 
     if (scrollTop >= navTop && !isFixed) { 
      isFixed = 1; 
      $nav.addClass('subnav-fixed'); 
     } else if (scrollTop <= navTop && isFixed) { 
      isFixed = 0; 
      $nav.removeClass('subnav-fixed'); 
     } 
    }; 
}) 

В файле CSS или в файле bootstrap_and_overrides.css.scss вы можете добавить этот код:

/* Add additional stylesheets below 
-------------------------------------------------- */ 

/* Subnav */ 
.subnav { 
    width: 100%; 
    height: 36px; 
    background-color: #eeeeee; /* Old browsers */ 
    background-repeat: repeat-x; /* Repeat the gradient */ 
    background-image: -moz-linear-gradient(top, #f5f5f5 0%, #eeeeee 100%); /* FF3.6+ */ 
    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#eeeeee)); /* Chrome,Safari4+ */ 
    background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Chrome 10+,Safari 5.1+ */ 
    background-image: -ms-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* IE10+ */ 
    background-image: -o-linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* Opera 11.10+ */ 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#eeeeee',GradientType=0); /* IE6-9 */ 
    background-image: linear-gradient(top, #f5f5f5 0%,#eeeeee 100%); /* W3C */ 
    border: 1px solid #e5e5e5; 
    -webkit-border-radius: 4px; 
    -moz-border-radius: 4px; 
      border-radius: 4px; 
} 
.subnav .nav { 
    margin-bottom: 0; 
} 
.subnav .nav > li > a { 
    margin: 0; 
    padding-top: 11px; 
    padding-bottom: 11px; 

    border-right: 1px solid #e5e5e5; 
    -webkit-border-radius: 0; 
    -moz-border-radius: 0; 
      border-radius: 0; 
} 
.subnav .nav > .active > a, 
.subnav .nav > .active > a:hover { 
    padding-left: 13px; 
    color: #777; 
    background-color: #e9e9e9; 
    border-right-color: #ddd; 
    border-left: 0; 
    -webkit-box-shadow: inset 0 3px 5px rgba(0,0,0,.05); 
    -moz-box-shadow: inset 0 3px 5px rgba(0,0,0,.05); 
      box-shadow: inset 0 3px 5px rgba(0,0,0,.05); 
} 
.subnav .nav > .active > a .caret, 
.subnav .nav > .active > a:hover .caret { 
    border-top-color: #777; 
} 
.subnav .nav > li:first-child > a, 
.subnav .nav > li:first-child > a:hover { 
    border-left: 0; 
    padding-left: 12px; 
    -webkit-border-radius: 4px 0 0 4px; 
    -moz-border-radius: 4px 0 0 4px; 
      border-radius: 4px 0 0 4px; 
} 
.subnav .nav > li:last-child > a { 
    border-right: 0; 
} 
.subnav .dropdown-menu { 
    -webkit-border-radius: 0 0 4px 4px; 
    -moz-border-radius: 0 0 4px 4px; 
      border-radius: 0 0 4px 4px; 
} 


/* Fixed subnav on scroll, but only for 980px and up (sorry IE!) */ 
@media (min-width: 980px) { 
    .subnav-fixed { 
    position: fixed; 
    top: 40px; 
    left: 0; 
    right: 0; 
    z-index: 1020; /* 10 less than .navbar-fixed to prevent any overlap */ 
    border-color: #d5d5d5; 
    border-width: 0 0 1px; /* drop the border on the fixed edges */ 
    -webkit-border-radius: 0; 
     -moz-border-radius: 0; 
      border-radius: 0; 
    -webkit-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); 
     -moz-box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); 
      box-shadow: inset 0 1px 0 #fff, 0 1px 5px rgba(0,0,0,.1); 
    filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */ 
    } 
    .subnav-fixed .nav { 
    width: 100%; 
    margin: 0 auto; 
    padding: 0 1px; 
    background-color: #FFFFFF; 
    } 
    .subnav .nav > li:first-child > a, 
    .subnav .nav > li:first-child > a:hover { 
    -webkit-border-radius: 0; 
     -moz-border-radius: 0; 
      border-radius: 0; 
    } 
} 


@media (max-width: 768px) { 

    /* Subnav */ 
    .subnav { 
    position: static; 
    top: auto; 
    z-index: auto; 
    width: auto; 
    height: auto; 
    background: #fff; /* whole background property since we use a background-image for gradient */ 
    -webkit-box-shadow: none; 
     -moz-box-shadow: none; 
      box-shadow: none; 
    } 
    .subnav .nav > li { 
    float: none; 
    } 
    .subnav .nav > li > a { 
    border: 0; 
    } 
    .subnav .nav > li + li > a { 
    border-top: 1px solid #e5e5e5; 
    } 
    .subnav .nav > li:first-child > a, 
    .subnav .nav > li:first-child > a:hover { 
     -webkit-border-radius: 4px 4px 0 0; 
     -moz-border-radius: 4px 4px 0 0; 
       border-radius: 4px 4px 0 0; 
    } 


} 

если этот код действителен для вас, пожалуйста, примите ответ и дайте положительный отзыв этому ответу. Я надеюсь, что это поможет.

спасибо.

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