Ceci est ma barre de navigation simple:
<div class="navbar navbar-fixed-top myfont" role="navigation">
<div class="">
<ul class="nav navbar-nav navbar-left">
<li>
<a class="navbar-brand" href="#">
<img src="assets/img/logo.png"/>
</a>
</li>
<li>
<button class="btn btn-navbar">
<i class="fa fa-edit"></i>
Create
</button>
</li>
</ul>
</div>
<ul class="nav navbar-nav navbar-right">
<li data-match-route="/"><a href="#/page-one">Login</a></li>
<li data-match-route="/"><a href="#/page-two/sub-a">Signup</a></li>
</ul>
</div>
Je voudrais juste éviter que cela ne s'écroule, parce que je n'en ai pas besoin, comment faire?
Je voudrais éviter d’écrire 300 000 lignes de CSS pour redéfinir les styles par défaut.
Toute suggestion?
Après avoir examiné de près, pas 300 000 lignes, mais environ 3-4 propriétés CSS que vous devez remplacer:
.navbar-collapse.collapse {
display: block!important;
}
.navbar-nav>li, .navbar-nav {
float: left !important;
}
.navbar-nav.navbar-right:last-child {
margin-right: -15px !important;
}
.navbar-right {
float: right!important;
}
Et avec cela, votre menu ne s'effondrera pas.
EXPLICATION
Les quatre propriétés CSS font le respect:
La propriété par défaut .collapse
dans bootstrap masque le côté droit du menu pour les tablettes (paysage) et les téléphones. À la place, un bouton bascule s'affiche pour le masquer/l'afficher. Ainsi, cette propriété remplace la valeur par défaut et affiche en permanence ces éléments.
Pour que le menu de droite apparaisse sur la même ligne avec le côté gauche, il faut que le côté gauche soit flottant à gauche.
Cette propriété est présente par défaut dans bootstrap mais pas sur tablette (portrait) pour la résolution du téléphone. Vous pouvez ignorer celui-ci, cela n'affectera probablement pas votre barre de navigation globale.
Ceci maintient le menu de droite à droite tandis que les éléments internes (li
) suivront la propriété 2. Nous avons donc à gauche float left et right- side flotte à droite ce qui les met en ligne.
La nabvar va s'effondrer sur de petits appareils. Le point de réduction est défini par @grid-float-breakpoint
dans les variables. Par défaut, ce sera avant 768px
. Pour les écrans inférieurs à la largeur d'écran 768
pixels, la barre de navigation se présentera comme suit:
Il est possible de changer le @grid-float-breakpoint
dans variables.less et de recompiler Bootstrap. Ce faisant, vous devrez également changer @screen-xs-max
dans navbar.less. Vous devrez définir cette valeur sur votre nouveau @grid-float-breakpoint -1
. Voir aussi: https://github.com/twbs/bootstrap/pull/10465 . Ceci est nécessaire pour changer les formulaires de la barre de navigation et les menus déroulants au point de rupture @ grid-float-en leur version mobile.
Le moyen le plus simple est de personnaliser le bootstrap
trouver une variable:
@grid-float-breakpoint
qui est réglé sur @screen-sm
, vous pouvez le modifier en fonction de vos besoins. J'espère que ça aide!
ajoutez vos variables personnalisées comme $grid-float-breakpoint: 0px;
avant le @import "bootstrap.scss";
Voici une approche qui laisse le comportement de réduction par défaut inchangé tout en permettant à une nouvelle section de navigation de rester toujours visible. C'est une augmentation de navbar
; navbar-header-menu
est une classe CSS que j'ai créée et ne fait pas partie de Bootstrap correct.
Placez ceci dans l'élément navbar-header
après navbar-brand
:
<div class="navbar-header-menu">
<ul class="nav navbar-nav">
<li class="active"><a href="#">I'm always visible</a></li>
</ul>
<form class="navbar-form" role="search">
<div class="form-group">
<input type="text" class="form-control" placeholder="Search">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
Ajouter ce CSS:
.navbar-header-menu {
float: left;
}
.navbar-header-menu > .navbar-nav {
float: left;
margin: 0;
}
.navbar-header-menu > .navbar-nav > li {
float: left;
}
.navbar-header-menu > .navbar-nav > li > a {
padding-top: 15px;
padding-bottom: 15px;
}
.navbar-header-menu > .navbar-nav .open .dropdown-menu {
position: absolute;
float: left;
width: auto;
margin-top: 0;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.15);
-webkit-box-shadow: 0 6px 12px rgba(0,0,0,.175);
box-shadow: 0 6px 12px rgba(0,0,0,.175);
}
.navbar-header-menu > .navbar-form {
float: left;
width: auto;
padding-top: 0;
padding-bottom: 0;
margin-right: 0;
margin-left: 0;
border: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
.navbar-header-menu > .navbar-form > .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-header-menu > .navbar-left {
float: left;
}
.navbar-header-menu > .navbar-right {
float: right !important;
}
.navbar-header-menu > *.navbar-right:last-child {
margin-right: -15px !important;
}
Vérifiez le violon: http://jsfiddle.net/L2txunqo/
Mise en garde: navbar-right
peut être utilisé pour trier les éléments visuellement, mais il n'est pas garanti de le tirer vers la partie la plus à droite de l'écran. Le violon démontre ce comportement avec le navbar-form
.
Si vous n'utilisez pas la version less, voici la ligne à modifier:
@media (max-width: 767px) { /* Change this to 0 */
.navbar-nav .open .dropdown-menu {
position: static;
float: none;
width: auto;
margin-top: 0;
background-color: transparent;
border: 0;
box-shadow: none;
}
.navbar-nav .open .dropdown-menu > li > a,
.navbar-nav .open .dropdown-menu .dropdown-header {
padding: 5px 15px 5px 25px;
}
.navbar-nav .open .dropdown-menu > li > a {
line-height: 20px;
}
.navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-nav .open .dropdown-menu > li > a:focus {
background-image: none;
}
}
Une autre méthode consiste simplement à supprimer collapse navbar-collapse
du balisage. Exemple avec Bootstrap 3.3.7
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<nav class="navbar navbar-atp">
<div class="container-fluid">
<div class="">
<ul class="nav navbar-nav nav-custom">
<li>
<a href="#" id="sidebar-btn"><span class="fa fa-bars">Toggle btn</span></a>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li>Nav item</li>
</ul>
</div>
</div>
</nav>
La solution suivante a fonctionné pour moi dans Bootstrap 3.3.4:
CSS:
/*no collapse*/
.navbar-collapse.collapse.off {
display: block!important;
}
.navbar-collapse.collapse.off ul {
margin: 0;
padding: 0;
}
.navbar-nav.no-collapse>li,
.navbar-nav.no-collapse {
float: left !important;
}
.navbar-right.no-collapse {
float: right!important;
}
ajoutez ensuite la classe . no-collapse à chacune des listes et la classe . off au conteneur principal. Voici un exemple écrit en jade:
nav.navbar.navbar-default.navbar-fixed-top
.container-fluid
.collapse.navbar-collapse.off
ul.nav.navbar-nav.no-collapse
li
a(href='#' class='glyph')
i(class='glyphicon glyphicon-info-sign')
ul.nav.navbar-nav.navbar-right.no-collapse
li.dropdown
a.dropdown-toggle(href='#', data-toggle='dropdown' role='button' aria-expanded='false')
| Tools
span.caret
ul.dropdown-menu(role='menu')
li
a(href='#') Tool #1
li
a(href='#')
| Logout