Bootstrap NavBar com itens alinhados à esquerda, ao centro ou à direita

437

No Bootstrap , qual é a maneira mais amigável para a plataforma de criar uma barra de navegação com o logotipo A à esquerda, itens de menu no centro e logotipo B à direita?

Aqui está o que eu tentei até agora, e ele acaba sendo alinhado para que o logotipo A fique à esquerda, os itens de menu ao lado do logotipo à esquerda e o logotipo B à direita.

<div class="navbar navbar-fixed-top navbar-custom ">
  <div class="container" >
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="#"><span class="navbar-logo">Logo_A</span></a>
    </div>
    <div class="collapse navbar-collapse">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Home</a></li>
        <li><a href="#about">Menu Item 1</a></li>
        <li><a href="#contact">Menu Item 2</a></li>
        <li><a href="#about">Menu Item 3</a></li>
      </ul>
      <ul class="nav navbar-nav navbar-right">
        <li><a href="#"><img src="images/Logo_B.png" class="img-responsive"></a></li>
      </ul>
    </div>
  </div>
</div>
Aliv
fonte

Respostas:

800

Atualização de 2019

Bootstrap 4

Agora que o Bootstrap 4 possui flexbox, o alinhamento da Navbar é muito mais fácil. Aqui estão exemplos atualizados de esquerda , direita e centro na barra de navegação do Bootstrap 4 e muitos outros cenários de alinhamento demonstrados aqui .

As classes flexbox , margens automáticas e utilitário de pedidos podem ser usadas para alinhar o conteúdo da Navbar, conforme necessário. Há muitas coisas a considerar, incluindo a ordem e o alinhamento dos itens da Navbar (marca, links, alternador) nas telas grandes e nas visualizações móvel / recolhida. Não use as classes de grade (linha, coluna) para a barra de navegação .

Aqui estão vários exemplos ...

Links esquerdo, central (marca) e direito:

insira a descrição da imagem aqui

<nav class="navbar navbar-expand-md navbar-dark bg-dark">
    <div class="navbar-collapse collapse w-100 order-1 order-md-0 dual-collapse2">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a class="nav-link" href="#">Left</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="//codeply.com">Codeply</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
    <div class="mx-auto order-0">
        <a class="navbar-brand mx-auto" href="#">Navbar 2</a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".dual-collapse2">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
    <div class="navbar-collapse collapse w-100 order-3 dual-collapse2">
        <ul class="navbar-nav ml-auto">
            <li class="nav-item">
                <a class="nav-link" href="#">Right</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
</nav>

http://www.codeply.com/go/qhaBrcWp3v


Outra opção BS4 Navbar com links centrais e sobreposição da imagem do logotipo :

links do centro e sobreposição da imagem do logotipo

<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
    <div class="navbar-collapse collapse w-100 dual-collapse2 order-1 order-md-0">
        <ul class="navbar-nav ml-auto text-center">
            <li class="nav-item active">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
    <div class="mx-auto my-2 order-0 order-md-1 position-relative">
        <a class="mx-auto" href="#">
            <img src="//placehold.it/120/ccff00" class="rounded-circle">
        </a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target=".dual-collapse2">
            <span class="navbar-toggler-icon"></span>
        </button>
    </div>
    <div class="navbar-collapse collapse w-100 dual-collapse2 order-2 order-md-2">
        <ul class="navbar-nav mr-auto text-center">
            <li class="nav-item">
                <a class="nav-link" href="#">Link</a>
            </li>
        </ul>
    </div>
</nav>


Ou , esses outros cenários de alinhamento do Bootstrap 4:

marca esquerda, links do centro morto (vazio à direita)

Marca Navbar à esquerda, links do centro morto


marca e centro de links, ícones esquerdo e direito

insira a descrição da imagem aqui


Mais exemplos do Bootstrap 4 :

alternador deixado no celular, marca no centro da marca direita
e links no celular
direito alinhar links no computador, links centrais no celular
esquerdo links & alternador, marca central, pesquisa direita


Veja também: O Bootstrap 4 alinha os itens da barra de navegação à direita
barra de navegação do Bootstrap 4 alinha à direita com o botão que não diminui no celular
Centralize um elemento no Bootstrap 4 Navbar


Bootstrap 3

Opção 1 - Brand center, com links de navegação esquerdo / direito:

insira a descrição da imagem aqui

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>    
  </div>
  <a class="navbar-brand" href="#">Brand</a>
  <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav navbar-left">
        <li><a href="#">Left</a></li>
        <li><a href="#about">Left</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
      <li><a href="#about">Right</a></li>
      <li><a href="#contact">Right</a></li>
    </ul>
  </div>
</nav>

.navbar-brand
{
    position: absolute;
    width: 100%;
    left: 0;
    text-align: center;
    margin:0 auto;
}
.navbar-toggle {
    z-index:3;
}

http://bootply.com/98314 (3.x)


Opção 2 - Links de navegação esquerdo, central e direito:

insira a descrição da imagem aqui

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>    
  </div>
  <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><a href="#">Left</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-center">
        <li><a href="#">Center</a></li>
        <li><a href="#">Center</a></li>
      <li><a href="#">Center</a></li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
        <li><a href="#">Right</a></li>
    </ul>
  </div>
</nav>

@media (min-width: 768px) {
  .navbar-nav.navbar-center {
    position: absolute;
    left: 50%;
    transform: translatex(-50%);
  }
}

http://www.bootply.com/SGYC6BWeBK

Opção 3 - Centralize a marca e os links

insira a descrição da imagem aqui

.navbar .navbar-header,
.navbar-collapse {
    float:none;
    display:inline-block;
    vertical-align: top;
}

@media (max-width: 768px) {
    .navbar-collapse  {
        display: block;
    }
}

http://www.codeply.com/go/1lrdvNH9GI

Mais exemplos:

Marca esquerda, links centrais
Ligador esquerdo, marca central

Para 3.x, veja também justificado para a navegação: Bootstrap center navbar


Centralizar a barra de navegação no Bootstrap O
Bootstrap 4 alinha os itens da barra de navegação à direita

Zim
fonte
1
como você pode fazer com que os itens à esquerda colapsem em outra alternância à esquerda?
Gepex
1
Eu criei 2 exemplos do jsfiddle, já que o bootply não está funcionando no momento. sol 1 e sol 2 . btw, soluzion 2 funciona melhor (IMHO)
GiuServ
Para o Bootstrap 4, usando o Firefox, o exemplo 1 não funciona. Adicionando a .absclasse faz com que o navbar-brandelemento para cobrir os botões à esquerda e à direita, tornando-os unclickable
8bithero
1
Como isso não está marcado como resposta? Dá 3 opções para BS 3 e 4, obrigado senhor.
Murkantilism
Nenhum dos links do codeply está sendo aberto e é por causa do design horrível usado nesse site. Eles misturaram todos os tipos de publicidade, graphQL ... juntos e, se um não carregar ou bloquear, a tela inteira ficará em branco. sim, é assim que o angular funciona (ou NÃO funciona).
AaA
58

Bootstrap 4

Temos várias maneiras de alinhar os itens navBars.

Para alinhamento à esquerda insira a descrição da imagem aqui

class = "navbar-nav mr-auto "

Para alinhar à direita insira a descrição da imagem aqui

class = "navbar-nav ml-auto "

Para alinhamento centralizado insira a descrição da imagem aqui

class = "navbar-nav mx-auto "

<nav class="navbar navbar-expand-sm bg-dark navbar-dark">
<a routerLink="/" class="navbar-brand" href="#">Bootsrap 4</a>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="home">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="contact">Contact us</a>
</li>
</ul>
</nav>
Jerold Joel
fonte
1
a adição de class = "navbar-brand mx-auto" na tag b-nav-item fez o truque para mim
Sheece Gardazi
36

Eu precisava de algo semelhante (itens alinhados à esquerda, central e direita), mas com a capacidade de marcar itens centralizados como ativos. O que funcionou para mim foi:

http://www.bootply.com/CSI2KcCoEM

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>    
  </div>
  <div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
      <li class="navbar-left"><a href="#">Left 1</a></li>
      <li class="navbar-left"><a href="#">Left 2</a></li>
      <li class="active"><a href="#">Center 1</a></li>
      <li><a href="#">Center 2</a></li>
      <li><a href="#">Center 3</a></li>
      <li class="navbar-right"><a href="#">Right 1</a></li>
      <li class="navbar-right"><a href="#">Right 2</a></li>
    </ul>
  </div>
</nav>

CSS:

@media (min-width: 768px) {
  .navbar-nav {
    width: 100%;
    text-align: center;
  }
  .navbar-nav > li {
    float: none;
    display: inline-block;
  }
  .navbar-nav > li.navbar-right {
    float: right !important;
  }
}
tomaszbak
fonte
1
Isso é bem próximo, mas quebra quando você o recolhe. Se você o visualizar em um dispositivo móvel, a "Marca" será exibida na barra de menus. A marca não faz parte da navegação real?
Spasticninja 16/01/2015
1
Isso responde ao OP mais de perto.
Roger Dueck
Até agora, isso funcionou para mim. Não tenho uma marca nem um elemento alinhado à direita, apenas três opções centralizadas. Obrigado
Alessandro
Acho que esta solução faz um trabalho melhor do que a resposta mais votada, pois ao reduzir o tamanho da tela nenhum dos elementos
fica
26

Bootstrap 4 (a partir do alpha 6)

As barras de navegação são construídas com o flexbox! Em vez de carros alegóricos, você precisará de utilitários flexbox e margin.

Para Alinhar à direita, use justify-content-endo collapsediv:

<div class="collapse navbar-collapse justify-content-end">
  <ul class="navbar-nav">
    <li class="nav-item active">
      <a class="nav-link" href="#">Home</a>
    </li>
  </ul>
</div>

Exemplo completo aqui: https://jsbin.com/kemawa/edit?output

Jeremy Lynch
fonte
3
Não funciona para mim ... o justify-content-end parece se aplicar ao nav e não parece estar funcionando para o navbar é a versão mais recente do bootstrap.
Stephane Paquet
1
@stephanePaquet, isso é aplicável ao alpha 6 (a versão mais recente do bootstrap) - o que você está usando?
Jeremy Lynch
11

Bato na minha cabeça, apenas reli minha resposta e percebi que o OP estava pedindo dois logotipos, um à esquerda e outro à direita, com um menu central, e não o contrário.

Isso pode ser realizado estritamente no HTML usando "navbar-right" e "navbar-left" do Bootstrap para os logotipos e, em seguida, "justificado por nav" em vez de "navbar-nav" para o UL. Não é necessário nenhum CSS adicional (a menos que você queira colocar a barra de navegação recolhida no centro na janela de exibição xs, será necessário substituir um pouco, mas isso deixará para você).

<nav class="navbar navbar-default" role="navigation">
  <div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </button>
    <div class="navbar-brand navbar-left"><a href="#"><img src="http://placehold.it/150x30"></a></div>

  </div>
  <div class="navbar-brand navbar-right"><a href="#"><img src="http://placehold.it/150x30"></a></div>

  <div class="navbar-collapse collapse">
    <ul class="nav nav-justified">
        <li><a href="#">home</a></li>
        <li><a href="#about">about</a></li>
    </ul>
  </div>
</nav>

Bootply: http://www.bootply.com/W6uB8YfKxm


Para quem chegou aqui tentando centralizar a "marca" aqui está minha antiga resposta:

Eu sei que este tópico é um pouco antigo, mas apenas para postar minhas descobertas ao trabalhar nisso. Decidi basear minha solução na resposta de skelly desde as pausas de tomaszbak no collaspe. Primeiro, criei o "navbar-center" e desliguei o float para a navbar normal no meu CSS:

.navbar-center
{
   position: absolute;
   width: 100%;
   left: 0;
   text-align: center;
   margin: auto;
}

.navbar-brand{
   float:none;
}

No entanto, o problema com a resposta de skelly é se você tem um nome de marca muito longo (ou deseja usar uma imagem para sua marca), depois de chegar à janela de exibição sm, pode haver sobreposição devido à posição absoluta e como os comentaristas têm disse, assim que você chega à janela de exibição xs, o interruptor de alavanca quebra (a menos que você use o posicionamento Z, mas eu realmente não queria ter que me preocupar com isso).

Então, o que fiz foi utilizar os utilitários responsivos de autoinicialização para criar várias versões do bloco da marca:

<nav class="navbar navbar-default" role="navigation">
<div class="navbar-header">
  <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
  </button>
  <div class="navbar-brand visible-xs"><a href="#">Brand That is Really Long</a></div>
</div>
<div class="navbar-brand visible-sm text-center"><a href="#">Brand That is Really Long</a></div>
<div class="navbar-brand navbar-center hidden-xs hidden-sm"><a href="#">Brand That is Really Long</a></div>

<div class="navbar-collapse collapse">
  <ul class="nav navbar-nav navbar-left">
      <li><a href="#">Left</a></li>
      <li><a href="#about">Left</a></li>
      <li><a href="#">Left</a></li>
      <li><a href="#about">Left</a></li>
      <li><a href="#">Left</a></li>
      <li><a href="#about">Left</a></li>
  </ul>
  <ul class="nav navbar-nav navbar-right">
    <li><a href="#about">Right</a></li>
    <li><a href="#contact">Right</a></li>
    <li><a href="#about">Right</a></li>
    <li><a href="#contact">Right</a></li>
    <li><a href="#about">Right</a></li>
    <li><a href="#contact">Right</a></li>
  </ul>
</div>

Portanto, agora as viewports lg e md têm a marca centralizada com links para a esquerda e para a direita. Quando você chega à viewport sm, seus links caem para a próxima linha para que você não se sobreponha à sua marca e, finalmente, aos xs viewport o collaspe entra em ação e você pode usar a alternância. Você pode dar um passo adiante e modificar as consultas de mídia para a barra de navegação direita e esquerda quando usada com a marca navbar, para que, na janela de visualização sm, os links estejam todos centralizados, mas não tenham tempo para examiná-lo.

Você pode verificar meu antigo bootply aqui: www.bootply.com/n3PXXropP3

Eu acho que ter três marcas pode ser tão problemático quanto o "z", mas eu sinto que, no mundo do design responsivo, essa solução se encaixa melhor no meu estilo.

Jonofthedead
fonte
1

Achei que a seguinte era uma solução melhor, dependendo do conteúdo dos itens esquerdo, central e direito. Uma largura de 100% sem margem causava sobreposição de divs e impedia que as tags âncora funcionassem corretamente - isto é, sem o uso desordenado dos índices z.

.navbar-brand
{
    position: absolute;
    width: 100%;
    left: 0;
    margin: auto;
    margin-left: 48%;
}
atreeon
fonte
1

Esta é uma pergunta datada, mas encontrei uma solução alternativa para compartilhar diretamente na página do github de inicialização. A documentação não foi atualizada e há outras perguntas sobre o SO que solicitam a mesma solução, embora em questões um pouco diferentes. Esta solução não é específica para o seu caso, mas como você pode ver, a solução é a <div class="container">seguinte, <nav class="navbar navbar-default navbar-fixed-top">mas também pode ser substituída por <div class="container-fluid"conforme necessário.

<!DOCTYPE html>
<html>

<head>
  <title>Navbar right padding broken </title>
  <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
  <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
</head>

<body>
  <nav class="navbar navbar-default navbar-fixed-top">
    <div class="container">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a href="#/" class="navbar-brand">Hello</a>
      </div>
      <div class="collapse navbar-collapse navbar-ex1-collapse">

        <ul class="nav navbar-nav navbar-right">
          <li>
            <div class="btn-group navbar-btn" role="group" aria-label="...">
              <button type="button" class="btn btn-default" data-toggle="modal" data-target="#modalLogin">Se connecter</button>
              <button type="button" class="btn btn-default" data-toggle="modal" data-target="#modalSignin">Créer un compte</button>
            </div>
          </li>
        </ul>
      </div>
    </div>
  </nav>
</body>

</html>

A solução foi encontrada em um violino nesta página: https://github.com/twbs/bootstrap/issues/18362

e está listado como não será corrigido na V3.

Shawn
fonte
1
<div class="d-flex justify-content-start">hello</div>    
<div class="d-flex justify-content-end">hello</div>
<div class="d-flex justify-content-center">hello</div>
<div class="d-flex justify-content-between">hello</div>
<div class="d-flex justify-content-around">hello</div>

Coloque os campos que você deseja centralizar, direita ou esquerda, de acordo com a divisão acima.

Nehil Koshiya
fonte
1

Você define a margem esquerda para auto -> ml-auto na seção que deseja mover para a direita.

 <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="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
  <span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
  <div class="navbar-nav ml-auto"> !<--MARGIN LEFT AUTO HERE !-->
    <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
    <a class="nav-item nav-link" href="#">Features</a>
    <a class="nav-item nav-link" href="#">Pricing</a>
    <a class="nav-item nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
  </div>
</div>

Gerard
fonte
-2

A solução mais simples:

Apenas divida as navbarcolunas em: por exemplo, se você tiver 24 colunas no total, 12 ficarão vazias e 12 restringirão a barra de navegação:

<nav class="navbar navbar-default">
    <div class="row">
       <div class="col-sm-4"></div>
       <div class="col-sm-4"></div>
       <div class="col-sm-4"></div>

       <div class="col-sm-12">
           <ul class="nav navbar-nav" align="center">
              <li><a href="#">Home</a></li>
              <li><a href="#">First Link</a></li>
              <li><a href="#">Second Link</a></li>
              <li><a href="#">Third Link</a></li>
              <li><a href="#">Fourth Link</a></li>
           </ul>
       </div>
    </div>
</nav>
parsecer
fonte
1
A linha da grade e a coluna não devem ser usadas dentro da barra de navegação. Use o conteúdo suportado .
Zim
@ Zim Por que não, o que há de tão ruim nisso?
Parsecer