Stacked Tabs w Bootstrap 3

157

Próbuję zaimplementować ułożone w stos karty wyrównane do lewej za pomocą wtyczki Tab jquery w Bootstrap 3, w której karty są renderowane pionowo na lewo od zawartości karty, a nie na górze. Kiedy próbuję wykonać następujące czynności;

   <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>

Karty są ułożone jedna na drugiej, ale nie są prawidłowo renderowane jako obrócone w lewo, zamiast tego są po prostu poziomymi kartami, które są nałożone jedna na drugą. Zawartość karty jest prawidłowo wyświetlana / ukryta w elementach div zawartości.

Zostało to obsłużone w Bootstrap 2.x przy użyciu klas tab-left i tab-right , ale jest to przestarzałe w Bootstrap 3 i tak naprawdę nie wydaje się być niczym zastępowane. Czy ktoś wie, czy we wtyczce Bootstrap 3 Tab możliwe jest prawidłowe renderowanie lewej i prawej karty?

osmbergs
źródło
1
Możesz użyć samej .navklasy, a następnie za pomocą siatki ustawić szerokość nawigacji i zawartość. Nie ma potrzeby używania „stacked nav”, ponieważ .navjest on domyślnie ustawiony na stosie.
Patrick Berkeley

Odpowiedzi:

236

Karty Lewy, Prawy i Poniżej zostały usunięte z Bootstrap 3, ale możesz dodać niestandardowy CSS, aby to osiągnąć.

.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;
}

Przykład roboczy: http://bootply.com/74926

AKTUALIZACJA

Jeśli nie potrzebujesz dokładnego wyglądu karty (obramowanej odpowiednio po lewej lub prawej stronie, gdy każda karta jest aktywowana), możesz w prosty sposób nav-stacked, wraz z Bootstrapem, col-*przesuwać karty w lewo lub w prawo ...

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
źródło
33
To doskonale rozwiązuje problem. Wciąż zastanawiam się, dlaczego wyciągnęli to z Bootstrap 3.
osmbergs
24
Dlaczego został usunięty? oO
roosevelt
4
Tak, sam plik .nav jest ułożony w stos, ale nie wygląda jak karta (odpowiednia lewa i prawa krawędź), gdy jest zaznaczony / aktywny. Taki jest cel zakładek.
Zim
17
Nie powinno być potrzeby dodawania tego z powrotem. Zostało to celowo usunięte. Zobacz oficjalną dokumentację Bootstrap, aby dowiedzieć się, jak powinieneś teraz sobie z tym poradzić w JavaScript / Tabs. Zobacz także ten samouczek dotyczący prawidłowego korzystania z konfiguracji Bootstrap 3 do wykonywania pionowych zakładek. tutsme-webdesign.info/bootstrap-3-toggable-tabs-and-pills
Neil Monroe
3
w przypadku prostej treści tekstowej każde rozwiązanie jest w porządku. Jeśli ktoś jeszcze napotkał problem, o którym mówię: rozwiązanie @ dbtek działało najlepiej: bootstrap-vertical-tabs Musiałem tylko dołączyć plik CSS ... dzięki @dbtek!
msanjay
47

Wygląda na to, że zespół Bootstrap go usunął. Zobacz tutaj: https://github.com/twbs/bootstrap/issues/8922 . Odpowiedź @ Skelly dotyczy niestandardowego css, którego nie chciałem robić, więc użyłem systemu siatki i pigułek nawigacyjnych. Działało dobrze i wyglądało świetnie. Kod wygląda tak:

<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>

Możesz to zobaczyć w akcji tutaj: http://bootply.com/81948

[Aktualizacja] @SeanK daje możliwość rezygnacji z włączania pigułek nawigacyjnych poprzez Javascript i zamiast tego używa data-toggle="pill". Sprawdź tutaj: http://bootply.com/96067 . Dzięki Sean.

David Lemayian
źródło
10
Nie musisz dołączać kodu javascript. Jeśli dodasz data-toggle = "pill" do każdego tagu a, to zadziała automatycznie przy użyciu bootstrap. Możesz zobaczyć tutaj: bootply.com/96067
SeanK
Dzięki @SeanK. Dodałem to do odpowiedzi.
David Lemayian
to było fajne i wolałbym to bez niestandardowego CSS, ale karty @ Skelly mają bardziej „ciągły” wygląd i relacje między aktywną kartą a zawartością. Byłoby dobrze, gdyby to samo można było jakoś osiągnąć tutaj, ale nie mogłem wymyślić, jak. Zrobiłem widelec zawężający tylko jeden przykład dla prostoty: bootply.com/QZfrLF0XjD
msanjay
1
Z drugiej strony dodałem trochę kolorowych treści i wydawało się, że radzi sobie to znacznie lepiej niż przyjęte podejście. patrz bootply.com/SeQ6z7fhbQ i bootply.com/cre9NpmXpA
msanjay
9

Nie powinno być potrzeby dodawania tego z powrotem. Zostało to celowo usunięte. Dokumentacja nieco się zmieniła i klasa CSS, która jest niezbędna („stos nawigacyjny”) jest wspomniana tylko w komponencie pigułki, ale powinna działać również dla zakładek.

Ten samouczek pokazuje, jak prawidłowo korzystać z konfiguracji Bootstrap 3, aby wykonywać pionowe zakładki:
tutsme-webdesign.info/bootstrap-3-toggable-tabs-and-pills

Neil Monroe
źródło
Usunęli go teraz całkowicie. Zobacz link powyżej, aby zapoznać się z procedurą.
Neil Monroe
Dziękuję Ci bardzo. Artykuł, z którym łączysz się, zawiera praktyczne, praktyczne przykłady i wiele wyjaśnień. Właśnie tego szukałem.
Aluan Haddad
Co jest warte, wygląda to dobrze tylko w przypadku tabletek nawigacyjnych. Karty nawigacyjne zostaną ułożone w stos, ale styl będzie wyglądał jak poziome karty na górze. Ponieważ OP zapytał konkretnie o karty nawigacyjne, nie sądzę, aby można to uznać za akceptowalną odpowiedź.
Jay Mathis,
Adres URL już nie działa! Ta odpowiedź staje się wtedy bez znaczenia!
Bobort