Bootstrap açılır menüsü eksik


324

Bootstrap 3 hala RC'de, ama ben sadece uygulamaya çalışıyordum. Alt menü sınıfını nasıl koyacağımı anlayamadım. Css'de sınıf bile yok ve yeni dokümanlar bile bu konuda bir şey söylemiyor

Açılan alt menü olarak sınıf adıyla 2.x'teydi


2
Menü, navs ve modals dahil olmak üzere bazı bileşenlerin sürüm 3'te değiştiğini unutmayın.
Deividi Cavarzan

11
BS3'teki bu (imho) kullanışlı özellik için yerel destek eksikliği, henüz geçiş yapmamamın ana nedenlerinden biridir. mobilde bu kadar kullanışlı olmadığını kabul ediyorum ve şimdi 'mobil ilk' yaklaşımları var, zaten uyguladıkları bir özelliği kaldırmak için dar görüşlü görünüyor, bu masaüstünde ÇOK yararlı
Andrew Brown

4
Beklenen işlevselliği kaldırmanın kısa görüşlü olduğunu kabul etti. Bu tür bir değişim değişikliği, kurumsal geliştiricilere kötü bir gün verir.
RJB

Bir açılır liste
Gothburz'u

Yanıtlar:


555

Güncelleme 2018

dropdown-submenuBootstrap 3 RC kaldırılmıştır. Bootstrap yazarı Mark Otto'nun sözleriyle ..

"Alt menülerin şu anda web'de çok fazla yeri yok, özellikle mobil web. 3.0 ile kaldırılacaklar" - https://github.com/twbs/bootstrap/pull/6342

Ancak, biraz ekstra CSS ile aynı işlevselliği elde edebilirsiniz.

Bootstrap 4 (fareyle üzerine gelindiğinde navbar alt menüsü)

.navbar-nav li:hover > ul.dropdown-menu {
    display: block;
}
.dropdown-submenu {
    position:relative;
}
.dropdown-submenu>.dropdown-menu {
    top:0;
    left:100%;
    margin-top:-6px;
}

Navbar'ı alt açılan vurgulu
Navbar'ı alt açılır vurgulu (sağ hizalanmış)
Navbar'ı alt açılan tıklayın (sağ hizalanmış)
Navbar'ı açılan vurgulu (hayır alt menüsü)


Önyükleme 3

3.0 RC 1 kullanan bir örnek: http://bootply.com/71520

Bootstrap 3.0.0 (final) kullanan bir örnek: http://bootply.com/86684

CSS

.dropdown-submenu {
    position:relative;
}
.dropdown-submenu>.dropdown-menu {
    top:0;
    left:100%;
    margin-top:-6px;
    margin-left:-1px;
    -webkit-border-radius:0 6px 6px 6px;
    -moz-border-radius:0 6px 6px 6px;
    border-radius:0 6px 6px 6px;
}
.dropdown-submenu:hover>.dropdown-menu {
    display:block;
}
.dropdown-submenu>a:after {
    display:block;
    content:" ";
    float:right;
    width:0;
    height:0;
    border-color:transparent;
    border-style:solid;
    border-width:5px 0 5px 5px;
    border-left-color:#cccccc;
    margin-top:5px;
    margin-right:-10px;
}
.dropdown-submenu:hover>a:after {
    border-left-color:#ffffff;
}
.dropdown-submenu.pull-left {
    float:none;
}
.dropdown-submenu.pull-left>.dropdown-menu {
    left:-100%;
    margin-left:10px;
    -webkit-border-radius:6px 0 6px 6px;
    -moz-border-radius:6px 0 6px 6px;
    border-radius:6px 0 6px 6px;
}

Örnek İşaretleme

<div class="navbar navbar-default navbar-fixed-top" role="navigation">
    <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>
        </div>
        <div class="collapse navbar-collapse navbar-ex1-collapse">
            <ul class="nav navbar-nav">
                <li class="menu-item dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Drop Down<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li class="menu-item dropdown dropdown-submenu">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Level 1</a>
                            <ul class="dropdown-menu">
                                <li class="menu-item ">
                                    <a href="#">Link 1</a>
                                </li>
                                <li class="menu-item dropdown dropdown-submenu">
                                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Level 2</a>
                                    <ul class="dropdown-menu">
                                        <li>
                                            <a href="#">Link 3</a>
                                        </li>
                                    </ul>
                                </li>
                            </ul>
                        </li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</div>

PS - Navbar'daki sol konumu ayarlayan örnek: http://bootply.com/92442


5
Evet Teşekkürler
Temamın

8
Örneğin , bootply.com/86684 , alt menüyü görüntülerken üst menü öğesinin doğru arka plan üzerine gelmesi için css'ye aşağıdaki satırı ekleyin:.dropdown-submenu:hover {background: #e2e1e1;}
Eduardo Moralles

1
3.1.1 ile de çalışır. Çözüm için çok teşekkürler. Düzgün çalışması için bootstrap.js dosyasını değiştirmeye çalışırken kafamı duvara dayayordum.
Joel Kinzel

2
Her şeyi olabildiğince basitleştirmeye çalışmak üzereyim ama bunun için birden fazla gezinme düzeyi (devlet web siteleri gibi) olmadan büyük web sitelerinde buna ihtiyaç var.
Troy Templeman

1
Fareyi üzerine getirmeden önce alt menü kaybolur, bu yüzden gezinme işe yaramaz! Üzerine gelmez, tıklamaya dayanarak, Tamam çalışır.
Polv

61

@skelly çözümü iyidir ancak fareyle üzerine gelme durumu çalışmadığından mobil cihazlarda çalışmaz.

BS 2.3.2 davranışını geri almak için biraz JS ekledim.

Not: Aşağıdaki bölüme yorum yapabileceğiniz halde, oraya ulaştığınız CSS ile çalışacaktır: http://bootply.com/71520

CSS:

/*.dropdown-submenu:hover>.dropdown-menu{display:block;}*/

JS:

$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
  // Avoid following the href location when clicking
  event.preventDefault();
  // Avoid having the menu to close when clicking
  event.stopPropagation();
  // If a menu is already open we close it
  $('ul.dropdown-menu [data-toggle=dropdown]').parent().removeClass('open');
  // opening the one you clicked on
  $(this).parent().addClass('open');
});

Sonuç WordPress temamda bulunabilir (Sayfanın başı): http://shprinkone.julienrenaux.fr/


5
Bu yazıdaki en zeki adam
sensin

2
Bu çözüm, masaüstündeyken fareyle üzerine gelme işlevini korumak istemez ve ikinci alt menü düzeyi için de çalışmaz. Bunun daha alt düzeylerde çalışması için son iki satırı aşağıdaki satıra değiştirin: Bu $(this).closest(".dropdown-submenu").toggleClass("open");, bağlantılar menüsü öğelerini açar / kapatır. Farenizi masaüstünde tutmak için tarayıcı görünüm alanı genişliğini kontrol etmek gerekir ve her site için farklılık gösterir.
edhedges

kodun için teşekkürler. ancak cep telefonunda kodunuzda hata var.
jian dan

42

Bugüne kadar (9 Ocak 2014) Bootstrap 3 hala alt menü açılır menüsünü desteklemiyor.

Google'a duyarlı gezinme menüsü hakkında arama yaptım ve bunun en iyisi olduğunu gördüm.

Öyle Akıllı menüleri http://www.smartmenus.org/

Bu çok düzeyli alt menü ile navigasyon menüsü isteyen herkes için bir çıkış yolu olduğunu umuyorum.

update 2015-02-17 Akıllı menüler artık alt menü için Bootstrap öğesi stilini tam olarak destekliyor. Daha fazla bilgi için lütfen Akıllı menüler web sitesine bakın.


PC'de gezinmek ve çoklu düzeylerde tablete tıklamak için bootstrap almaya çalışırken sorun yaşıyordum. Sen sadece benim günümü yaptın! Güzel çalışıyor - Bootstrap ile hemen hemen aynı biçimlendirmeyi kullanır. Teşekkür ederim! :)
Hippi

2
Bu çözüm ücretsiz, açık kaynaklıdır ve BootStrap 3 ile çok iyi çalışır.
Patrick Desjardins

5
İnanılmaz! Kolay! Bootstrap 3 entegrasyonu hakkında ayrıntılı bilgi için buraya bakınız: vadikom.github.io/smartmenus/src/demo/bootstrap-navbar.html
manafire

1
Smartmenus güzel, ancak basit düğmelerle değil yalnızca navbar'larla çalışır.
Nikolai Prokoschenko

1
u benim projemi kurtardı :-)
Sikander

5

Shprink'in kodu bana en çok yardımcı oldu, ancak ekrandan çıkmak için açılır listeden kaçınmak için bunu güncelledim:

JS:

$('ul.dropdown-menu [data-toggle=dropdown]').on('click', function(event) {
    // Avoid following the href location when clicking
    event.preventDefault(); 
    // Avoid having the menu to close when clicking
    event.stopPropagation(); 
    // If a menu is already open we close it
    $('ul.dropdown-menu [data-toggle=dropdown]').parent().removeClass('open');
    // opening the one you clicked on
    $(this).parent().addClass('open');

    var menu = $(this).parent().find("ul");
    var menupos = $(menu).offset();

    if (menupos.left + menu.width() > $(window).width()) {
        var newpos = -$(menu).width();
        menu.css({ left: newpos });    
    } else {
        var newpos = $(this).parent().width();
        menu.css({ left: newpos });
    }

});

CSS: FROM background-color: #eeeeee TO background-color: # c5c5c5 - beyaz yazı tipi ve açık renkli iyi görünmüyordu.

.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
  background-color: #c5c5c5;
  border-color: #428bca;
}

Umarım bu insanlara benim için olduğu kadar yardımcı olur!

Ama ben Bootstrap en kısa sürede subs özelliği eklemek umuyoruz.



2

Birkaç gün önce bu sorunla karşılaştım. Birçok çözüm denedim ve hiçbiri gerçekten benim için işe yaramadı sonunda bootstrap açılır kodunun bir uzatma / geçersiz kılma oluşturdu. Orijinal kodun closeMenus işlevinde yapılan değişikliklerin bir kopyasıdır.

Bootstrap js çekirdek sınıflarını etkilemediğinden iyi bir çözüm olduğunu düşünüyorum.

Bunu gihub'da kontrol edebilirsiniz: https://github.com/djokodonev/bootstrap-multilevel-dropdown


Bu çok seviyeli açılır menü için çok iyi bir çözüm, kullanmayı seviyorum.
huncyrus

Beğendiğine sevindim :-)
George Donev

-2

Açılır menü için başka bir çözüm daha yapıyorum. Umarım bu yardımcı olur Sadece bu js betiğini ekleyin

<script type="text/javascript"> jQuery("document").ready(function() {
  jQuery("ul.dropdown-menu > .dropdown.parent").click(function(e) {
    e.preventDefault();
    e.stopPropagation();
    if (jQuery(this).hasClass('open2'))
      jQuery(this).removeClass('open2');
    else {
      jQuery(this).addClass('open2');
    }

  });
}); < /script>

<style type="text/css">.open2{display:block; position:relative;}</style>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.