Bootstrap 4 aligner les éléments de la barre de navigation vers la droite


341

Comment aligner un élément de la barre de navigation à droite?

Je veux avoir le login et m'inscrire à droite. Mais tout ce que j'essaie ne semble pas fonctionner.

Image de Navbar

Voici ce que j'ai essayé jusqu'à présent:

  • <div>autour <ul>de l'attribut:style="float: right"
  • <div>autour <ul>de l'attribut:style="text-align: right"
  • essayé ces deux choses sur les <li>balises
  • essayé à nouveau toutes ces choses avec !importantajouté à la fin
  • changé nav-itemà nav-rightla<li>
  • a ajouté une pull-sm-rightclasse au<li>
  • a ajouté une align-content-endclasse au<li>

Voici mon code:

<div id="app" class="container">
  <nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar</a>
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricingg</a>
      </li>
    </ul>
    <ul class="navbar-nav " >
      <li  class="nav-item">
        <a class="nav-link" href="{{ url('/login') }}">Login</a>
      </li>
      <li  class="nav-item">
        <a class="nav-link" href="{{ url('/register') }}">Register</a>
      </li>
    </ul>
  </nav>
  @yield('content')
</div>

Les barres de navigation sont construites avec flexbox à partir de la version alpha 6.
max

1
Oui, alors que dois-je faire pour l'aligner à droite. J'ai déjà essayé quelques trucs flexbox sans aucune chance. : /
Luuk Wuijster

Réponses:


533

Bootstrap 4 a plusieurs façons d'aligner les éléments de la barre de navigation . float-rightne fonctionnera pas car la barre de navigation est maintenant flexbox.

Vous pouvez utiliser mr-autopour la marge droite automatique sur le 1er (gauche) navbar-nav. Alternativement , ml-autopourrait être utilisé sur le 2ème (à droite) navbar-nav, ou si vous n'en avez qu'un seul navbar-nav.

<nav class="navbar navbar-expand-md navbar-light bg-light">
    <a class="navbar-brand" href="#">Navbar</a>
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarNav">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Features</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Pricing</a>
            </li>
        </ul>
        <ul class="navbar-nav">
            <li class="nav-item">
                <a class="nav-link" href="{{ url('/login') }}">Login</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="{{ url('/register') }}">Register</a>
            </li>
        </ul>
    </div>
</nav>

https://codeply.com/go/P0G393rzfm

Il existe également des utilitaires flexbox. Dans ce cas, vous avez 2 navbar-navs, donc justify-content-betweendans navbar-collapsetravailleraient la même l'espace entre eux,

 <div class="navbar-collapse collapse justify-content-between">
     <ul class="navbar-nav mr-auto">
               ..
     </ul>
     <ul class="navbar-nav">
           ..
     </ul>
 </div>


Mise à jour pour Bootstrap 4.0 et plus récent

À partir de la version bêta de Bootstrap 4, ml-autofonctionnera toujours pour pousser les éléments vers la droite. Sachez simplement que les navbar-toggleable-cours ont changé ennavbar-expand-*

Navbar droite mise à jour pour Bootstrap 4


Un autre scénario d'alignement à droite de la barre de navigation Bootstrap 4 comprend un bouton sur la droite qui reste en dehors de la navigation de l' effondrement mobile afin qu'il soit toujours affiché à toutes les largeurs.

Bouton d'alignement à droite toujours visible

entrez la description de l'image ici

entrez la description de l'image ici


Connexes: Bootstrap NavBar avec des éléments alignés à gauche, au centre ou à droite


1
mr-autone fonctionne pas si l'élément le plus à droite est un dropdown. Les éléments de la liste déroulante débordent sur le bord droit de la page.
Ege Ersoz

6
Cela fonctionne: codeply.com/go/P0G393rzfm - le problème n'est pas mr-autoque la question concerne l'alignement à droite qui fonctionne. Postez une nouvelle question si vous avez des problèmes avec la liste déroulante, mais vous faites probablement référence à ce problème: stackoverflow.com/questions/43867258/…
Zim

2
Vous pouvez également ajouter .dropdown-menu-rightdes listes déroulantes alignées à droite dans la barre de navigation. Ne pas le faire peut couper la liste déroulante à certaines largeurs.
rybo111

@ZimSystem merci pour vos réponses. J'ai suivi votre réponse ici stackoverflow.com/questions/19733447/… . J'ai une question: comment puis-je obtenir un élément sur le côté gauche et un élément sur le côté droit?
Lokesh Pandey

Dans codeply.com/go/P0G393rzfm , vous avez montré un ul à gauche et un ul à droite. Cela a été réalisé en ajoutant mr-auto au premier. Mais que faire si je n'ai qu'un seul ul? Je ne veux pas créer un ul vide juste pour en aligner un autre à droite.
Santosh Kumar

140

Dans mon cas, je voulais un seul ensemble de boutons / options de navigation et j'ai constaté que cela fonctionnerait:

<div class="collapse navbar-collapse justify-content-end" id="navbarCollapse">
  <ul class="navbar-nav">
    <li class="nav-item">
      <a class="nav-link" href="#">Sign Out</a>
    </li>
  </ul>
</div>

Donc, vous ajouterez justify-content-endà la div et omettez mr-autosur la liste.

Voici un exemple de travail .


3
@numediaweb Dans l'exemple OP, il utilise deux éléments dans la navigation, alignant un à gauche et un à droite; où j'en ai utilisé un seul et l'ai aligné à droite. Ce n'est pas la bonne réponse mais elle est utile comme réponse à une légère variation de la question;)
Craig van Tonder

Cela fonctionne pour un seul navbar-nav, mais la mr-autométhode est utilisée dans les documents Bootstrap .
Zim

mr-autoest utilisé dans les documents, mais pas pour aligner les éléments vers la gauche. Cette réponse est sémantiquement correcte, comme mentionné dans cet article: blog.getbootstrap.com/2017/01/06/bootstrap-4-alpha-6
qwaz

La question est si vous essayez d'aligner 2 listes de liens ou 1. Si seulement 1, votre réponse fonctionne et m'a été très utile. Merci!
barefootsanders

Cela a fonctionné pour moi, mais je ne sais pas pourquoi celle au-dessus de cette réponse ne fonctionne pas.
Suhail Akhtar

59

Pour ceux qui sont toujours aux prises avec ce problème dans BS4, essayez simplement le code ci-dessous -

<ul class="navbar-nav ml-auto">

7
Non - cela aligne tout à droite. La question dit qu'il ne souhaite aligner qu'un seul élément vers la droite.
NickG

2
Vérifiez le document officiel à m*-autoce sujet pousse le contenu vers la gauche ou la droite selon l'endroit où vous mettez la classe
Pierre de LESPINAY

@PierredeLESPINAY, oui ml-autopousse le contenu à la position la plus à droite, mais je me demandais juste pourquoi mr-0ne pouvait pas faire le travail?
avocat le

42

Sur Bootstrap 4

Si vous souhaitez aligner la marque à votre gauche et tous les éléments de la barre de navigation à droite, changez la valeur par défaut mr-autoenml-auto

<ul class="navbar-nav ml-auto">

32

Sur Bootsrap 4.0.0-beta.2 , aucune des réponses énumérées ici n'a fonctionné pour moi. Enfin, le site Bootstrap m'a donné la solution, non pas via sa doc mais via son code source de la page ...

Getbootstrap.com aligner leur droit navbar-navà droite avec l'aide de la classe suivante: ml-md-auto.


1
A fonctionné magnifiquement pour moi. Rien d'autre ne l'a fait.
Maria Campbell

14

Utilisez ml-autoplutôt mr-autoqu'après avoir appliqué navjustify-content-end auul


9

Utilisez ce code pour déplacer des éléments vers la droite.

<div class="collapse navbar-collapse justify-content-end">

1
cela ne fonctionnera pas lorsque vous avez un menu réduit, mais avec le ml-auto, cela fonctionnera toujours parce que lorsque le menu est réduit, les éléments <li> prennent toujours 100% de la largeur, donc aucune marge ne sera appliquée.
Ryan S

8

Si vous voulez Accueil, Fonctionnalités et Prix à gauche immédiatement après votre nav-brand, puis connectez-vous et inscrivez-vous à droite puis encapsulez les deux listes <div>et utilisez .justify-content-between:

<div class="collapse navbar-collapse justify-content-between">
<ul>....</ul>
<ul>...</ul>
</div>

7

Ajoutez simplement la mr-autoclasse à ul:

<ul class="nav navbar-nav mr-auto">

Si vous avez une liste de menus des deux côtés, vous pouvez faire quelque chose comme ceci:

<ul class="navbar-nav mr-auto">
  <li class="nav-item active">
    <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled" href="#">Disabled</a>
  </li>
</ul>
<ul class="navbar-nav ml-auto">
  <li class="nav-item active">
    <a class="nav-link" href="#">left 1</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">left 2</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled" href="#">left disable</a>
  </li>
</ul>

5

utiliser la classe flex-row-reverse

<nav class="navbar navbar-toggleable-md navbar-light">
    <div class="container">
        <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false"
          aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <a class="navbar-brand" href="#">
            <i class="fa fa-hospital-o fa-2x" aria-hidden="true"></i>
        </a>
        <div class="collapse navbar-collapse flex-row-reverse" id="navbarNavAltMarkup">
            <ul class="navbar-nav">
                <li><a class="nav-item nav-link active" href="#" style="background-color:#666">Home <span class="sr-only">(current)</span></a</li>
                <li><a class="nav-item nav-link" href="#">Doctors</a></li>
                <li><a class="nav-item nav-link" href="#">Specialists</a></li>
                <li><a class="nav-item nav-link" href="#">About</a></li>
            </ul>
        </div>
    </div>
</nav>

2

C'est peu de changement dans boostrap 4. Pour aligner la barre de navigation sur le côté droit, vous devez faire seulement deux changements. elles sont:

  1. en navbar-navcomplément de classe w-100que navbar-nav w-100pour faire la largeur 100
  2. en nav-item dropdownclasse, ajoutez ml-autoas nav-item dropdown ml-autopour laisser la marge laissée comme auto.

Si vous ne comprenez pas, veuillez vous référer à l'image que j'ai jointe à cela.

Lien CodePen

entrez la description de l'image ici

Code source complet

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <div class="collapse navbar-collapse" id="navbarNavDropdown">
    <ul class="navbar-nav w-100">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricing</a>
      </li>
      <li class="nav-item dropdown ml-auto">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown link
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
    </ul>  
  </div>
</nav>

2

Pour bootstrap 4.3.1, j'utilisais des nav-pills et rien ne fonctionnait pour moi sauf ceci:

    <ul class="nav nav-pills justify-content-end ml-auto">
    <li ....</li>
    </ul>

2

Dans v4.3 bootstrap ajoutez simplement ml-autodans <ul class="navbar-nav"> Ex:<ul class="navbar-nav ml-auto">


0

J'utilise Angular 4 (v.4.0.0) et ng-bootstrap (Bootstrap 4). Ce code ne sera pas tous pertinents, mais en espérant que les gens puissent choisir ce qui fonctionne. Il m'a fallu un certain temps pour trouver une solution pour que mes articles se justifient, se replier correctement et pour implémenter une liste déroulante sur ma photo de profil Google (en utilisant OAuth).

<div id="header" class="header">
  <nav class="navbar navbar-toggleable-sm navbar-inverse bg-faded fixed-top">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
      aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
    <a class="navbar-brand" href="#">
          <img alt='Brand' src='../assets/images/logo-white.png' class='navbar-logo-img d-inline-block align-top '>
          <span class="navbar-logo-text">Oncoscape</span>
        </a>
    <div class="collapse navbar-collapse justify-content-end" id="navbarSupportedContent">
      <ul class="navbar-nav float-left">
        <a class="navbar-items nav-item nav-link active " *ngIf='authenticated' (click)='goDashboard()'>
          <span class="fa fa-dashboard"></span>Dashboard
        </a>
        <a class="nav-item nav-link navbar-items active" href="http://resources.sttrcancer.org/oncoscape-contact">
          <span class="fa fa-comments"></span>Feedback
        </a>
        <li class="nav-item dropdown">
          <a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            <img *ngIf='user && authenticated'  class="navbar-pic" src={{user.thumbnail}} alt="Smiley face">
          </a>
          <div *ngIf='user && authenticated' class="dropdown-menu " aria-labelledby="navbarDropdownMenuLink">
            <a class="dropdown-item" (click)="toProfile()">Account</a>
            <div class="dropdown-item">
              <app-login></app-login>
            </div>
          </div>
        </li>
      </ul>
    </div>
  </nav>
</div>
<router-outlet></router-outlet>

0

Pour Bootstrap 4 beta, un exemple de barre de navigation avec des éléments alignés sur le côté droit est:

<div id="app" class="container">
  <nav class="navbar navbar-expand-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar</a>
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricingg</a>
      </li>
    </ul>
    <ul class="navbar-nav">
      <li class="nav-item">
        <a class="nav-link" href="{{ url('/login') }}">Login</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="{{ url('/register') }}">Register</a>
      </li>
    </ul>
  </nav>
</div>

0

L'utilisation de la boîte flexible bootstrap nous aide à contrôler le placement et l'alignement de votre élément de navigation. pour le problème ci-dessus, ajouter mr-auto est une meilleure solution.

<div id="app" class="container">
  <nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <a class="navbar-brand" href="#">Navbar</a>
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricingg</a>
      </li>
    </ul>
    <ul class="navbar-nav  " >
      <li  class="nav-item">
        <a class="nav-link" href="{{ url('/login') }}">Login</a>
      </li>
      <li  class="nav-item">
        <a class="nav-link" href="{{ url('/register') }}">Register</a>
      </li>
    </ul>
  </nav>
  @yield('content')
</div>

un autre placement peut inclure

fixed- top
    fixed bottom
    sticky-top

0

L'exemple de travail pour BS v4.0.0-beta.2:

<body>
    <nav class="navbar navbar-expand-md navbar-dark bg-dark">
      <a class="navbar-brand" href="#">Navbar</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>

      <div class="collapse navbar-collapse" id="navbarNavDropdown">
        <ul class="navbar-nav mr-auto">
          <li class="nav-item active">
            <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Features</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Pricingg</a>
          </li>
        </ul>
        <ul class="navbar-nav">
          <li class="nav-item">
            <a class="nav-link" href="#">Login</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Register</a>
          </li>
        </ul>
      </div>
    </nav>


    <div class="container-fluid">
      container content
    </div>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="node_modules/jquery/dist/jquery.slim.min.js"></script>
    <script src="node_modules/popper.js/dist/umd/popper.min.js"></script>
    <script src="node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
  </body>

0

Si tout ce qui précède échoue, j'ai ajouté 100% de largeur à la classe navbar en CSS. Jusque-là, mr auto ne travaillait pas pour moi sur ce projet en utilisant 4.1.


-1

Trouvez la ligne 69 dans le verndor-prefixes.less et écrivez-la comme suit:

.panel {
    margin-bottom: 20px;
    height: 100px;
    background-color: #fff;
    border: 1px solid transparent;
    border-radius: 4px;
    -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.05);
    box-shadow: 0 1px 1px rgba(0,0,0,.05);
}


-2

Je viens de le copier depuis l'une des pages getbootstrap de la version 4 publiée, qui fonctionnait beaucoup mieux que ci-dessus

<div class="d-none d-xl-block col-xl-2 bd-toc float-md-right">
    <ul class="section-nav">
         <li class="toc-entry toc-h2"><a href="#overview">Overview</a></li>
         <li class="toc-entry toc-h2"><a href="#classes">Classes</a></li>
         <li class="toc-entry toc-h2"><a href="#mixins">Mixins</a></li>
         <li class="toc-entry toc-h2"><a href="#responsive">Responsive</a></li>
    </ul>
</div> 

-3

Je suis nouveau pour empiler les débordements et nouveau pour le développement frontal. C'est ce qui a fonctionné pour moi. Je ne voulais donc pas que les éléments de la liste soient affichés.

.hidden {
  display:none;
  } 
  
 #loginButton{
 
 margin-right:2px;
 
 }
<nav class="navbar navbar-toggleable-md navbar-light bg-faded fixed-top">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="#">NavBar</a>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active hidden">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item hidden">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item hidden">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit" id="loginButton"><a href="#">Log In</a></button>
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit"><a href="#">Register</a></button>
    </form>
  </div>
</nav>

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.