Guias empilhadas no Bootstrap 3

157

Estou tentando implementar guias empilhadas alinhadas à esquerda usando o plug-in Tab jquery no Bootstrap 3, onde as guias são renderizadas verticalmente à esquerda do conteúdo da guia, e não na parte superior. Quando tento o seguinte;

   <ul class="nav nav-tabs nav-stacked">
        <li><a href="#tab1" data-toggle="tab">Tab 1</a></li>
        <li><a href="#tab2" data-toggle="tab">Tab 2</a></li>
        <li><a href="#tab3" data-toggle="tab">Tab 3</a></li>
    </ul>


    <div class="tab-content">
        <div class="tab-pane fade" id="tab1">
            Tab 1 content
        </div>
        <div class="tab-pane fade" id="tab2">
            Tab 2 content              
        </div>
        <div class="tab-pane fade" id="tab3">
            Tab 3 content
        </div>
    </div>

As guias são empilhadas umas sobre as outras, mas não são renderizadas corretamente como viradas para a esquerda. Em vez disso, são apenas guias horizontais presas umas sobre as outras. O conteúdo da guia é exibido / oculto corretamente nas divs de conteúdo.

Isso foi tratado no Bootstrap 2.x usando as classes tab-left e tab-right , mas foi preterido no Bootstrap 3 e realmente não parece ser substituído por nada. Alguém sabe se a renderização da guia esquerda-direita é possível no plug-in Bootstrap 3 Tab?

osmbergs
fonte
1
Você pode usar a .navclasse sozinha e, com a grade, defina a largura da navegação e do seu conteúdo. Não há necessidade de uma 'navegação empilhada', pois ela .navé empilhada por padrão.
Patrick Berkeley

Respostas:

236

As guias Esquerda, Direita e Abaixo foram removidas do Bootstrap 3, mas você pode adicionar CSS personalizado para isso.

.tabs-below > .nav-tabs,
.tabs-right > .nav-tabs,
.tabs-left > .nav-tabs {
  border-bottom: 0;
}

.tab-content > .tab-pane,
.pill-content > .pill-pane {
  display: none;
}

.tab-content > .active,
.pill-content > .active {
  display: block;
}

.tabs-below > .nav-tabs {
  border-top: 1px solid #ddd;
}

.tabs-below > .nav-tabs > li {
  margin-top: -1px;
  margin-bottom: 0;
}

.tabs-below > .nav-tabs > li > a {
  -webkit-border-radius: 0 0 4px 4px;
     -moz-border-radius: 0 0 4px 4px;
          border-radius: 0 0 4px 4px;
}

.tabs-below > .nav-tabs > li > a:hover,
.tabs-below > .nav-tabs > li > a:focus {
  border-top-color: #ddd;
  border-bottom-color: transparent;
}

.tabs-below > .nav-tabs > .active > a,
.tabs-below > .nav-tabs > .active > a:hover,
.tabs-below > .nav-tabs > .active > a:focus {
  border-color: transparent #ddd #ddd #ddd;
}

.tabs-left > .nav-tabs > li,
.tabs-right > .nav-tabs > li {
  float: none;
}

.tabs-left > .nav-tabs > li > a,
.tabs-right > .nav-tabs > li > a {
  min-width: 74px;
  margin-right: 0;
  margin-bottom: 3px;
}

.tabs-left > .nav-tabs {
  float: left;
  margin-right: 19px;
  border-right: 1px solid #ddd;
}

.tabs-left > .nav-tabs > li > a {
  margin-right: -1px;
  -webkit-border-radius: 4px 0 0 4px;
     -moz-border-radius: 4px 0 0 4px;
          border-radius: 4px 0 0 4px;
}

.tabs-left > .nav-tabs > li > a:hover,
.tabs-left > .nav-tabs > li > a:focus {
  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
}

.tabs-left > .nav-tabs .active > a,
.tabs-left > .nav-tabs .active > a:hover,
.tabs-left > .nav-tabs .active > a:focus {
  border-color: #ddd transparent #ddd #ddd;
  *border-right-color: #ffffff;
}

.tabs-right > .nav-tabs {
  float: right;
  margin-left: 19px;
  border-left: 1px solid #ddd;
}

.tabs-right > .nav-tabs > li > a {
  margin-left: -1px;
  -webkit-border-radius: 0 4px 4px 0;
     -moz-border-radius: 0 4px 4px 0;
          border-radius: 0 4px 4px 0;
}

.tabs-right > .nav-tabs > li > a:hover,
.tabs-right > .nav-tabs > li > a:focus {
  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
}

.tabs-right > .nav-tabs .active > a,
.tabs-right > .nav-tabs .active > a:hover,
.tabs-right > .nav-tabs .active > a:focus {
  border-color: #ddd #ddd #ddd transparent;
  *border-left-color: #ffffff;
}

Exemplo de trabalho: http://bootply.com/74926

ATUALIZAR

Se você não precisa da aparência exata de uma guia (delimitada adequadamente à esquerda ou à direita, à medida que cada guia é ativada), pode usar de maneira simples nav-stacked, juntamente com o Bootstrap, col-*para flutuar as guias para a esquerda ou direita ...

nav-stackeddemo: http://codeply.com/go/rv3Cvr0lZ4

<ul class="nav nav-pills nav-stacked col-md-3">
    <li><a href="#a" data-toggle="tab">1</a></li>
    <li><a href="#b" data-toggle="tab">2</a></li>
    <li><a href="#c" data-toggle="tab">3</a></li>
</ul>
Zim
fonte
33
Isso resolve perfeitamente o problema. Ainda me perguntando por que eles tiraram isso do Bootstrap 3.
osmbergs
24
Por que foi removido? oO
roosevelt
4
Sim, o .nav sozinho é empilhado, mas não se parece com uma guia (apropriada à esquerda, à direita) quando é selecionado / ativo. Esse é o objetivo das guias.
Zim
17
Não é necessário adicionar isso novamente. Isso foi removido intencionalmente. Consulte a documentação oficial do Bootstrap sobre como você deve lidar com isso agora em JavaScript / Tabs. Consulte também este tutorial sobre como usar a instalação do Bootstrap 3 corretamente para fazer guias verticais. tutsme-webdesign.info/bootstrap-3-toggable-tabs-and-pills
Neil Monroe
3
para conteúdo de texto simples, qualquer uma das soluções é adequada. Se alguém mais enfrentar o problema de que estou falando: a solução da @ dbtek funcionou melhor: bootstrap-vertical-tabs Eu apenas precisei incluir o arquivo CSS ... obrigado @dbtek!
msanjay
47

A equipe do Bootstrap parece ter removido. Veja aqui: https://github.com/twbs/bootstrap/issues/8922 . @ A resposta de Skelly envolve CSS personalizado, que eu não queria fazer, então usei o sistema de grade e nav-pills. Funcionou bem e parecia ótimo. O código tem a seguinte aparência:

<div class="row">

  <!-- Navigation Buttons -->
  <div class="col-md-3">
    <ul class="nav nav-pills nav-stacked" id="myTabs">
      <li class="active"><a href="#home" data-toggle="pill">Home</a></li>
      <li><a href="#profile" data-toggle="pill">Profile</a></li>
      <li><a href="#messages" data-toggle="pill">Messages</a></li>
    </ul>
  </div>

  <!-- Content -->
  <div class="col-md-9">
    <div class="tab-content">
      <div class="tab-pane active" id="home">Home</div>
      <div class="tab-pane" id="profile">Profile</div>
      <div class="tab-pane" id="messages">Messages</div>
    </div>
  </div>

</div>

Você pode ver isso em ação aqui: http://bootply.com/81948

[Atualização] O @SeanK oferece a opção de não ter que ativar os navegadores através do Javascript e, em vez disso, usá-lo data-toggle="pill". Confira aqui: http://bootply.com/96067 . Obrigado Sean.

David Lemayian
fonte
10
Você não precisa incluir o javascript. Se você adicionar data-toggle = "pill" a cada tag a, ele funcionará automaticamente usando o bootstrap. Você pode ver aqui: bootply.com/96067
SeanK
Obrigado @SeanK. Adicionei à resposta.
David Lemayian
isso foi legal e eu teria preferido isso sem o CSS personalizado, mas as guias do @ Skelly têm uma aparência e um relacionamento mais 'contínuos' entre a guia ativa e o conteúdo. Seria bom se o mesmo pudesse ser alcançado de alguma forma aqui, mas não consegui descobrir como. Fiz um garfo estreitamento apenas um exemplo de simplicidade: bootply.com/QZfrLF0XjD
msanjay
1
Por outro lado, coloquei algum conteúdo colorido e isso parecia lidar com isso muito melhor do que a abordagem aceita. veja bootply.com/SeQ6z7fhbQ e bootply.com/cre9NpmXpA
msanjay
9

Não é necessário adicionar isso novamente. Isso foi removido intencionalmente. A documentação mudou um pouco e a classe CSS necessária ("nav-stacked") é mencionada apenas no componente comprimidos, mas também deve funcionar para as guias.

Este tutorial mostra como usar a instalação do Bootstrap 3 corretamente para fazer guias verticais:
tutsme-webdesign.info/bootstrap-3-toggable-tabs-and-pills

Neil Monroe
fonte
Eles o removeram completamente agora. Veja o link acima para o procedimento.
Neil Monroe
Muito obrigado. O artigo ao qual você vinculou fornece exemplos práticos de trabalho e muitas explicações. Isto é exatamente o que eu estava procurando.
Aluan Haddad
Pelo que vale a pena, isso parece adequado apenas para os remédios. as guias de navegação serão empilhadas, mas o estilo se parecerá com as guias horizontais na parte superior. Como o OP perguntou especificamente sobre as guias de navegação, não acho que isso possa ser considerado uma resposta aceitável.
Jay Mathis
O URL não funciona mais! Essa resposta se torna sem sentido!
Bobort