62 votes

Réplication de Bootstraps main nav et subnav

J'ai besoin de bricoler rapidement les fonctionnalités de la navigation principale de Twitter et de la navigation secondaire, par exemple http://twitter.github.com/bootstrap/scaffolding.html (lorsque vous faites défiler le sous-navigateur devient fixe pour cette navigation principale)

Quelqu'un l'a-t-il mis en œuvre ou existe-t-il des tutoriels?

73voto

Oleg Points 2995

Voici mon code pour implémenter cette fonctionnalité:

 $(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');
});
 

24voto

migajek Points 3635

À partir du 04/12/2012, la réponse acceptée n'est plus le meilleur choix car la fonctionnalité souhaitée a été incluse dans Bootstrap. Veuillez consulter Affixer un composant JavaScript qui fait partie de Bootstrap JS.

12voto

baptme Points 6928

Super réponse de @Oleg,

Pour les gens comme moi qui veulent reproduire le comportement réactif du .subnav

Voici le code css (sans couleurs, bordures et effets)

 body {  padding-top: 90px; }
@media (max-width: 980px) {
    body {
        padding-top: 0;
    }
}
.subnav {
    width: 100%;
}
@media (max-width: 768px) {
    .subnav {
        position: static;
        top: auto;
        z-index: auto;
        width: auto;
        height: auto;
    }
    .subnav .nav > li {
        float: none;
    }
}
@media (min-width: 980px) {
  .subnav-fixed {
    position: fixed;
    top: 40px;
    left: 0;
    right: 0;
    z-index: 1020;
  }
 .subnav-fixed .nav {
    width: 938px;
    margin: 0 auto;
  }
}
@media (min-width: 1210px) {
  .subnav-fixed .nav {
    width: 1168px;
  }
}
 

Si vous voulez cloner le style du menu (y compris les couleurs, les bordures et les effets)

http://jsfiddle.net/baptme/ydY6W/

0voto

ForbesLindesay Points 3524

Les deux réponses ci-dessus fonctionnent très bien, mais je pensais que je ferais savoir aux gens que j'ai transformé cela en un module (sans la dépendance jQuery) disponible sur ForbesLindesay / booting-sub-nav . Il peut être utilisé seul avec une balise de script ou via https://github.com/component/component/

0voto

Junaid Points 117

Voici un autre code

 $(function(){
  var
    $win = $(window),
    $filter = $('.navbar'),
    $filterSpacer = $('<div />', {
      "class": "filter-drop-spacer",
      "height": $filter.outerHeight()
    });
  $win.scroll(function(){     
    if(!$filter.hasClass('navbar-fixed-top')){
        if($win.scrollTop() > $filter.offset().top){
        $filter.before($filterSpacer);
        $filter.addClass("navbar-fixed-top");
      }
    }else if ($filter.hasClass('navbar-fixed-top')){
      if($win.scrollTop() < $filterSpacer.offset().top){
      $filter.removeClass("navbar-fixed-top");
      $filterSpacer.remove();
    }
    } 
  });
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X