Modifier le point d'arrêt de l'effondrement de la barre de navigation de bootstrap sans utiliser MOINS


205

Actuellement, lorsque la largeur du navigateur tombe en dessous de 768 pixels, la barre de navigation passe en mode réduit. Je veux changer cette largeur à 1000px, donc lorsque le navigateur est en dessous de 1000px, la barre de navigation passe en mode réduit. Je veux le faire sans utiliser MOINS, j'utilise un stylet pas MOINS.

Mon problème est le même que dans cette question: Bootstrap 3 Navbar Collapse

Mais toutes les réponses dans ces questions expliquent comment le faire en changeant la variable LESS. Je n'ai pas eu affaire à MOINS, j'utilise un stylet, donc je veux savoir comment cela peut être fait en utilisant un stylet ou une autre méthode.

Merci!

Réponses:


50

Vous devez écrire une requête média spécifique pour cela, à partir de votre question, en dessous de 768px, la barre de navigation s'effondrera, alors appliquez-la au-dessus de 768px et en dessous de 1000px, juste comme ça:

@media (min-width: 768px) and (max-width: 1000px) {
   .collapse {
       display: none !important;
   }
}

Cela masquera l'effondrement de la barre de navigation jusqu'à l'occurrence par défaut de l'unité d'amorçage. Au fur et à mesure que la classe d'effondrement bascule, les actifs internes à l'intérieur de l'effondrement de la barre de navigation seront automatiquement masqués, comme vous devez définir votre CSS comme vous le souhaitez.


Actuellement, la barre de navigation s'effondre lorsque la largeur est inférieure à 768 px. Mais je veux que la barre de navigation s'effondre lorsque la largeur est inférieure à 1000 pixels. Pour cela, n'auriez-vous pas besoin d'afficher .collapse entre 768 et 1000?
Nearpoint

oui, la collapseclasse est importante pour l'écran mobile de sorte que si la largeur est inférieure à 768px, la barre de navigation sera display:none, donc l'action requise serait appliquée à l'intérieur de 768 et 1000 mark ...
SaurabhLP

64
cela ne fonctionne pas sur Bootstrap 3 parce qu'il ya une autre règle navbar-collapse.collapsequi a display: block !important. La désactivation qui fera en sorte que le bouton de réduction n'apparaîtra pas ... donc je suppose que c'est beaucoup de classes qui doivent être redéfinies, pas seulementcollapse
Daniele Ricci

42
Oui, un tas de classes Bootstrap doit être remplacé dans la requête de média personnalisé: bootply.com/120604
Zim

1
Haha qui diable a construit le bootstrap? Vous ne pensiez pas que nous aurions besoin de changer ce petit détail?
MH

400

MISE À JOUR 2018

Bootstrap 4

Changer le point d'arrêt de la barre de navigation est plus facile dans Bootstrap 4 en utilisant les navbar-expand-*classes:

<nav class="navbar fixed-top navbar-expand-sm">..</nav>

  • navbar-expand-sm = menu mobile sur les écrans xs <576px
  • navbar-expand-md = menu mobile sur les écrans sm <768px
  • navbar-expand-lg = menu mobile sur les écrans md <992px
  • navbar-expand-xl = menu mobile sur écrans lg <1200px
  • navbar-expand = ne jamais utiliser le menu mobile
  • (no expand class) = toujours utiliser le menu mobile

Si vous excluez navbar-expand-*le menu mobile sera utilisé à des alllargeurs. Voici une démo des 6 états de la barre de navigation : Bootstrap 4 Navbar Example

Vous pouvez également utiliser un point d'arrêt personnalisé (??? px) en ajoutant un peu de CSS. Par exemple, voici 1300 px.

@media (min-width: 1300px){
    .navbar-expand-custom {
        flex-direction: row;
        flex-wrap: nowrap;
        justify-content: flex-start;
    }
    .navbar-expand-custom .navbar-nav {
        flex-direction: row;
    }
    .navbar-expand-custom .navbar-nav .nav-link {
        padding-right: .5rem;
        padding-left: .5rem;
    }
    .navbar-expand-custom .navbar-collapse {
        display: flex!important;
    }
    .navbar-expand-custom .navbar-toggler {
        display: none;
    }
}

Bootstrap 4 Navbar Breakpoint personnalisé
Exemples Bootstrap 4 Navbar Breakpoint Exemples


Bootstrap 3

Pour Bootstrap 3.3.x, voici le CSS de travail pour remplacer le point d'arrêt de la barre de navigation. Passez 991pxà la dimension en pixels du point auquel vous souhaitez que la barre de navigation s'effondre ...

@media (max-width: 991px) {
  .navbar-header {
      float: none;
  }
  .navbar-left,.navbar-right {
      float: none !important;
  }
  .navbar-toggle {
      display: block;
  }
  .navbar-collapse {
      border-top: 1px solid transparent;
      box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
  }
  .navbar-fixed-top {
      top: 0;
      border-width: 0 0 1px;
  }
  .navbar-collapse.collapse {
      display: none!important;
  }
  .navbar-nav {
      float: none!important;
      margin-top: 7.5px;
  }
  .navbar-nav>li {
      float: none;
  }
  .navbar-nav>li>a {
      padding-top: 10px;
      padding-bottom: 10px;
  }
  .collapse.in{
      display:block !important;
  }
}

Exemple de travail pour 991px: http://www.bootply.com/j7XJuaE5v6
Exemple de travail pour 1200px: https://www.codeply.com/go/VsYaOLzfb4 (avec formulaire de recherche)

Remarque: ce qui précède fonctionne pour tout ce qui dépasse 768 pixels . Si vous devez le changer en moins de 768px, l' exemple de moins de 768px est ici .



Essayez cette première visite: [link] ( getbootstrap.com/customize Locate: 'Less variables' -> 'Media queries breakpoints' Change: @ screen-lg value from 1200px to 1920px Locate: “Grid system” -> @ grid-float -breakpoint Change: @ screen-sm-min à @ screen-lg Faites défiler jusqu'à la fin de la page. Cliquez sur "Compiler et télécharger" Extraire et utiliser ces fichiers téléchargés.
rpalzona

6
Ce code ci-dessus fonctionne lorsque je définis une valeur supérieure à 768px, mais je dois obtenir l'inverse ... Je veux seulement qu'il s'effondre par exemple à 400px, mais lorsque je définit cette valeur, le bootstrap semble reprendre le 768 d'origine - Des idées? Merci
Chris Richards

6
Bien que cette réponse fonctionne comme un charme, mais qu'elle dérange avec le menu déroulant , vous devrez peut-être améliorer la réponse.
Abhishek Pandey

2
@AbhishekPandey J'ai trouvé utile cette réponse (partie concernant la liste déroulante)
cbuchart

1
Je vous remercie. Contrairement à la «solution» avec la coche à côté, votre code fonctionne réellement.
Michael S. Miller du

46

dans bootstrap3 , remplacez cette variable @ grid-float-breakpoint par celle dont vous avez besoin. La valeur par défaut est 768px


17
Pouvez-vous poster un exemple, s'il vous plaît?
e.thompsy

2
Gardez à l'esprit que si vous utilisez sass et que vous ne voulez pas remplacer le code fournisseur (vous ne devriez pas), vous devez inclure le fichier qui contient la variable avec votre valeur personnalisée avant les fichiers sass de démarrage. La raison en est que toutes les variables de Bootstrap sont définies par défaut! valeurs, nous devons donc remplacer ces valeurs en important d'abord nos variables.
Makis K.

Veuillez ajouter un exemple de la façon de procéder ... Je suis nouveau dans le bootstrap et grep révèle 0 instance de cette variable dans mon projet.
Matt Clark

1
@MattClark @grid-float-breakpointest défini sur le compilateur: getbootstrap.com/customize - la valeur par défaut est @screen-sm-minmais vous pouvez la changer en 1234px.
rybo111

24

Enfin travaillé sur la façon de changer la largeur de l'effondrement en jouant avec '@ grid-float-breakpoint' sur http://getbootstrap.com/customize/ .

Allez à la ligne 2923 dans bootstrap.css (également la version min) et passez @media screen and (min-width: 768px) {à@media screen and (min-width: 1000px) {

Le code finira donc par être:

@media screen and (min-width: 1000px) {
  .navbar-brand {
    float: left;
    margin-right: 5px;
    margin-left: -15px;
  }
  .navbar-nav {
    float: left;
    margin-top: 0;
    margin-bottom: 0;
  }
  .navbar-nav > li {
    float: left;
  }
  .navbar-nav > li > a {
    border-radius: 0;
  }
  .navbar-nav.pull-right {
    float: right;
    width: auto;
  }
  .navbar-toggle {
    position: relative;
    top: auto;
    left: auto;
    display: none;
  }
  .nav-collapse.collapse {
    display: block !important;
    height: auto !important;
    overflow: visible !important;
  }
}

Notez que le numéro de ligne que vous avez cité sera différent si vous avez utilisé le Customizer: getbootstrap.com/customize
henrywright

1
Je viens de changer le @grid-float-breakpointdans mes responsive.lessœuvres pour moi!
cvng

6
Vous devez remplacer cela dans un autre fichier CSS au lieu de modifier directement les fichiers CSS d'amorçage.
Ivanka Todorova du

1
Première visite: [link] ( getbootstrap.com/customize Locate: 'Less variables' -> 'Media queries breakpoints' Change: @ screen-lg value from 1200px to 1920px Locate: “Grid system” -> @ grid-float-breakpoint Changer: @ screen-sm-min en @ screen-lg Faites défiler jusqu'à la fin de la page. Cliquez sur "Compiler et télécharger" Extraire et utiliser ces fichiers téléchargés.
rpalzona

13

Je viens de le faire avec succès en utilisant le code CSS suivant.

@media(max-width:1000px)  {

    .navbar-collapse.collapse {
        display: none !important;
    }

    .navbar-collapse {
        overflow-x: visible !important;
    }

    .navbar-collapse.in {
      overflow-y: auto !important;
    }

    .collapse.in {
      display: block !important;
    }

}

2
Il n'affiche pas le bouton de menu réduit lorsque la largeur est comprise entre 768 pixels et 1000 pixels.
artisan

4
@craftsman: Pour le bouton, utilisez ceci: .navbar-toggle {display: block! important; } .navbar-header {largeur: 100%; hauteur: 60px; }
Aniket Suryavanshi

3
n'affiche toujours pas le contenu dans le menu hamburger
behzad

13

Dans le code source Bootstrap 3 .LESS , il existe une variable définie dans variables.lessappelée @grid-float-breakpointqui a le commentaire utile suivant:

//**Point at which the navbar becomes uncollapsed
@grid-float-breakpoint: @screen-sm-min;

La @grid-float-breakpoint-maxvaleur correspondante est définie sur moins 1px:

//**Point at which the navbar begins collapsing
@grid-float-breakpoint-max: (@grid-float-breakpoint-max - 1);

Solution:

Il suffit donc de définir la @grid-float-breakpointvaleur à 1000 pixels à la place et de reconstruire bootstrap.lessenbootstrap.css :

par exemple

@grid-float-breakpoint: 1000px;

Comment reconstruire? J'ai essayé cette ligne de commande: $ lessc bootstrap.less bootstrap.cssmais rien ne s'est passé
AnthonyR

@AnthonyRn: Je n'ai aucune idée de la configuration de votre projet. J'ai simplement mis à jour la source Bootstrap LESS dans mon projet VS 2013 et reconstruite lors de la sauvegarde. vous devriez peut-être poser une nouvelle question?
Fin du codage

Mon problème a été résolu en utilisant l'outil de personnalisation en ligne de Bootstrap ici getbootstrap.com/customize Merci pour la solution!
AnthonyR

1
Je pense que cela devrait être la réponse acceptée, car elle utilise les propres méthodes de Bootstraps pour définir le point d'arrêt. À titre d'exemple, j'ai pu simplement «reconstruire» le bootstrap et obtenir le résultat souhaité en définissant cette variable sur ce dont j'avais besoin pour être le point d'arrêt.
Serge Melis

@AnthonyR Pour reconstruire, vous utilisez la commande grunt grunt distqui régénérera le répertoire dist. Vous exécuterez cette commande à partir du répertoire où vous avez votre gruntfile.js. Référence: getbootstrap.com/getting-started/#grunt
Radmation

11

La manière Sass de changer les variables de bootstrap est en fait documentée sur la page github de bootstrap-sass .

Redéfinissez simplement les variables avant de démarrer @import bootstrap:

$grid-float-breakpoint: 1000px;

@import 'bootstrap';

7

En plus de la réponse @Skely, pour faire fonctionner les menus déroulants à l'intérieur de la barre de navigation, ajoutez également leurs classes à remplacer. Code final ci-dessous:

    @media (min-width: 768px) and (max-width: 991px) {
        .navbar-nav .open .dropdown-menu {
            position: static;
            float: none;
            width: auto;
            margin-top: 0;
            background-color: transparent;
            border: 0;
            -webkit-box-shadow: none;
            box-shadow: none;
        }
        .navbar-nav .open .dropdown-menu > li > a {
            line-height: 20px;
        }
        .navbar-nav .open .dropdown-menu > li > a,
        .navbar-nav .open .dropdown-menu .dropdown-header {
            padding: 5px 15px 5px 25px;
        }
        .dropdown-menu > li > a {
            display: block;
            padding: 3px 20px;
            clear: both;
            font-weight: normal;
            line-height: 1.42857143;
            color: #333;
            white-space: nowrap;
        }
        .navbar-header {
            float: none;
        }
        .navbar-toggle {
            display: block;
        }
        .navbar-collapse {
            border-top: 1px solid transparent;
            box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
        }
        .navbar-collapse.collapse {
            display: none!important;
        }
        .navbar-nav {
            float: none!important;
            /*margin: 7.5px -15px;*/
            margin: 7.5px 50px 7.5px -15px
        }
        .navbar-nav>li {
            float: none;
        }
        .navbar-nav>li>a {
            padding-top: 10px;
            padding-bottom: 10px;
        }
        .navbar-text {
            float: none;
            margin: 15px 0;
        }
        /* since 3.1.0 */
        .navbar-collapse.collapse.in { 
            display: block!important;
        }
        .collapsing {
            overflow: hidden!important;
        }
    }

code démo


4

Dans bootstrap v4, la navigation peut être réduite tôt ou tard en utilisant différentes classes css

par exemple:

  • navbar-toggleable-sm
  • navbar-toggleable-md
  • navbar-toggleable-lg

Avec le bouton de navigation:

  • caché-sm-up
  • caché-md-up
  • caché-lg-up

Dans l'alpha actuel, ne semble aller que navbar-toggleable-smpour moi, xsil ne bascule jamais. Ça pourrait être moi qui fais quelque chose de mal. Merci!
nerdwaller

@nerdwaller a l'air d'avoir raison, a fait une modification de xs à sm.
whitneyland

3

Pour Bootstrap 3.3, c'est le seul code dont vous avez besoin:

@media (min-width: 768px) and (max-width: 1000px) {
   .navbar-collapse.collapse {
       display: none !important;
   }
   .navbar-toggle{
        display: block !important;
   }
   .navbar-header{
        float: none;
   }
}

Ne fonctionne pas complètement. Les éléments de menu qu'il affiche ne sont pas verticaux, mais horizontaux.
Volomike

3

Cela a fonctionné pour moi Bootstrap3

@media (min-width: 768px) {
    .navbar-header {
          float: none;
      }
      .navbar-toggle {
          display: block;
      }
      .navbar-collapse {
          border-top: 1px solid transparent;
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
      }
      .navbar-collapse.collapse {
          display: none!important;
      }
      .navbar-collapse.collapse.in {
          display: block!important;
      }
      .navbar-nav {
          float: none!important;
          margin: 7.5px -15px;
      }
      .navbar-nav>li {
          float: none;
      }
      .navbar-nav>li>a {
          padding-top: 10px;
          padding-bottom: 10px;
      }
}

Il a fallu un certain temps pour comprendre ces deux choses:

.navbar-collapse.collapse {
   display: none!important;
}
.navbar-collapse.collapse.in {
   display: block!important;
}

Cela a fonctionné pour moi. La seule exception est que la largeur minimale de pixel doit être de 1000 pixels dans votre échantillon ci-dessus.
Sascha

2

Le mieux serait d'utiliser un port du processeur CSS que vous utilisez.

Je suis un grand fan de SASS donc j'utilise actuellement https://github.com/thomas-mcdonald/bootstrap-sass

Il semble qu'il y ait une fourchette pour Stylus ici: https://github.com/Acquisio/bootstrap-stylus

Sinon, Search & Replace est votre meilleur ami dans la version CSS ...


Donc, pour l'option de recherche et remplacement, cela signifie-t-il éditer directement les requêtes multimédias bootstrap.css? Puis-je modifier une requête multimédia qui ne s'applique qu'à la barre de navigation? On m'a dit que ce n'était pas une bonne idée d'éditer les fichiers d'amorçage source, mais je ne sais pas pourquoi, qu'en pensez-vous?
Nearpoint

1

Salut, je pense que vous pouvez le faire en utilisant CSS comme celui-ci, vous pouvez changer le menu d'amorçage de point d'arrêt

    @media (max-width: 1200px) {
    .navbar-header {
        float: none;
    }
    .navbar-left,.navbar-right {
        float: none !important;
    }
    .navbar-toggle {
        display: block;
    }

    .navbar-collapse.collapse {
        display: none!important;
    }
    .navbar-nav {
        float: none!important; 
    }
    .navbar-nav>li {
        float: none;
    } 
    .collapse.in{
        display:block !important;
    }
   .navbar-nav .open .dropdown-menu {
       position: static;
       float: none;
       width: auto;
       margin-top: 0;
       background-color: transparent;
       border: 0;
       -webkit-box-shadow: none;
       box-shadow: none;
    }
}

1

Les barres de navigation peuvent utiliser les classes .navbar-toggler, .navbar-collapse et .navbar-expand {-sm | -md | -lg | -xl} pour changer lorsque leur contenu s'effondre derrière un bouton. En combinaison avec d'autres utilitaires, vous pouvez facilement choisir quand afficher ou masquer des éléments particuliers.

Pour les barres de navigation qui ne s'effondrent jamais, ajoutez la classe .navbar-expand sur la barre de navigation. Pour les barres de navigation qui s'effondrent toujours, n'ajoutez aucune classe .navbar-expand.

Par exemple :

<nav class="navbar navbar-expand-lg"></nav>

Le menu mobile s'affiche sur grand écran.

Référence: https://getbootstrap.com/docs/4.0/components/navbar/


Oui, celui-ci fonctionne pour moi exactement comme j'avais besoin. Bien sûr, si vous avez besoin de points d'arrêt plus spécifiques, la configuration de votre propre requête multimédia sera nécessaire (d'où la réponse favorable à cette question)
Coderhi

0

C'est ce qui m'a fait l'affaire:

@media only screen and (min-width:769px) and (max-width:1000px){
.navbar-collapse.collapse {
    display: none !important;
}
.navbar-collapse.collapse.in {
    display: block !important;
}
.navbar-header .collapse, .navbar-toggle {
    display:block !important;
}

Avec votre solution et celle de Veek, je constate qu'entre 768 et 1000, les marges augmentent de manière incorrecte. Ils vont bien en dehors de ces limites. Avec votre solution, l'icône du menu replié ne reste pas non plus à droite après l'effondrement, mais se heurte à la "marque".
Mike O'Connor

Donc désolé, j'ai apparemment gaffé. J'ai toujours ce problème des marges trop larges apparaissant à l'intérieur de ces limites. Cependant, je vois maintenant qu'un exemple de bootstrap en ligne officiel présente le même problème de marges, en natif.
Mike O'Connor

0

Dans bootstrap 4, si vous souhaitez passer outre lorsque navbar-expand- *, se développe et se réduit et affiche et masque le hamburger (navbar-toggler), vous devez trouver ce style / définition dans bootstrap.css, et le redéfinir dans votre propre customstyle.css (ou directement dans bootstrap.css si vous êtes si enclin).

Par exemple. Je voulais que le navbar-expand-lg s'effondre et montre le navbar-toggler à 950px. Dans bootstrap.css je trouve:

@media (max-width: 991.98px) {
  .navbar-expand-lg > .container,
  .navbar-expand-lg > .container-fluid {
    padding-right: 0;
    padding-left: 0;
  }
}

Et en dessous de ça ...

@media (min-width:992px) { 
    ... lots of styling ...
}

J'ai copié les deux requêtes @media et les ai collées dans mon style.css, puis j'ai modifié la taille en fonction de mes besoins. Je mon cas, je voulais qu'il s'effondre à 950px. Les requêtes @media doivent avoir des tailles différentes (je suppose), j'ai donc défini la largeur maximale du conteneur à 949.98px et utilisé le 950px pour l'autre requête @media et le code suivant a donc été ajouté à mon style.css. Ce n'était pas facile à démêler des solutions tordues que j'ai trouvées sur Stackoverflow et ailleurs. J'espère que cela t'aides.

@media (max-width: 949.98px) {
    .navbar-expand-lg > .container,
    .navbar-expand-lg > .container-fluid {
        padding-right: 0;
        padding-left: 0;
    }
}

@media (min-width: 950px) {
    .navbar-expand-lg {
        -webkit-box-orient: horizontal;
        -webkit-box-direction: normal;
        -ms-flex-flow: row nowrap;
        flex-flow: row nowrap;
        -webkit-box-pack: start;
        -ms-flex-pack: start;
        justify-content: flex-start;
    }
    .navbar-expand-lg .navbar-nav {
        -webkit-box-orient: horizontal;
        -webkit-box-direction: normal;
        -ms-flex-direction: row;
        flex-direction: row;
    }
    .navbar-expand-lg .navbar-nav .dropdown-menu {
        position: absolute;
    }
    .navbar-expand-lg .navbar-nav .dropdown-menu-right {
        right: 0;
        left: auto;
    }
    .navbar-expand-lg .navbar-nav .nav-link {
        padding-right: 0.5rem;
        padding-left: 0.5rem;
    }
    .navbar-expand-lg > .container,
    .navbar-expand-lg > .container-fluid {
        -ms-flex-wrap: nowrap;
        flex-wrap: nowrap;
    }
    .navbar-expand-lg .navbar-collapse {
        display: -webkit-box !important;
        display: -ms-flexbox !important;
        display: flex !important;
        -ms-flex-preferred-size: auto;
        flex-basis: auto;
    }
    .navbar-expand-lg .navbar-toggler {
        display: none;
    }
    .navbar-expand-lg .dropup .dropdown-menu {
        top: auto;
        bottom: 100%;
    }
}

0

Voici mon code de travail en utilisant dans React avec Bootstrap

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
    crossorigin="anonymous">
<style>
  @media (min-width: 768px) and (max-width: 1000px) {
   .navbar-collapse.collapse {
       display: none !important;
   }
   .navbar-toggle{
        display: block !important;
   }
   .navbar-header{
        float: none;
   }
}
  </style>

0

Il est maintenant pris en charge sur Bootstrap 4.4

navbar-expand-sm 

Oui, mais vous auriez besoin de navbar-expand-lg pour réduire la navigation sur les grands écrans
Coderhi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.