ブートストラップドロップダウンサブメニューがありません


324

ブートストラップ3はまだRC版ですが、実装しようとしていました。サブメニュークラスの入れ方がわかりませんでした。CSSにはクラスがなく、新しいドキュメントでさえそれについて何も言わない

2.xにはドロップダウンサブメニューとしてクラス名がありました。


2
メニュー、ナビゲーション、モーダルなど、一部のコンポーネントがバージョン3で変更されたことに注意してください。
Deividi Cavarzan 2013

11
BS3のこの(私見の)便利な機能に対するネイティブサポートの欠如は、私がまだ切り替えていない主な理由の1つです。モバイルではそれほど役に立たないことに同意しますが、彼らは「モバイルファースト」のアプローチを採用していますが、すでに実装されている機能を削除するのは近視眼的で、デスクトップで非常に便利です
Andrew Brown

4
期待される機能を削除することは近視眼的であることに同意しました。この種の重大な変更は、エンタープライズ開発者に悪い日を与えます。
RJB 2014

ドロップダウンを作成するには、css codepen.io/Gothburz/pen/GpJKqP
Gothburz

回答:


555

2018年更新

dropdown-submenuブートストラップ3 RCで削除されました。Bootstrapの作者Mark Ottoの言葉を借りれば、

「現在、サブメニューはウェブ上であまり場所がありません。特にモバイルウェブです。3.0で削除されます。」-https ://github.com/twbs/bootstrap/pull/6342

ただし、少しだけCSSを追加すれば、同じ機能を利用できます。

ブートストラップ4(ホバーのナビゲーションバーサブメニュー)

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

ナビゲーションバーサブメニュードロップダウンホバー
ナビゲーションバーサブメニュードロップダウンホバー(右揃え)
ナビゲーションバーサブメニュードロップダウンクリック(右揃え)
ナビゲーションバードロップダウンホバー(サブメニューなし)


ブートストラップ3

3.0 RC 1を使用する例を次に示します。http//bootply.com/71520

Bootstrap 3.0.0(最終版)を使用した例を次に示します。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;
}

マークアップの例

<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-左側の位置を調整するナビゲーションバーの例:http ://bootply.com/92442


5
うん、おかげで私は、ブートストラップの古いバージョンから貼り付けコピー、それ私のテーマのスタイルシートを追加しているwordpress.org/themes/bikaner
DEVC

8
例についてbootply.com/86684サブメニューを表示するときに、親メニュー項目の正しい背景ホバーのCSSに以下の行を追加します .dropdown-submenu:hover {background: #e2e1e1;}
エドゥアルドMoralles

1
3.1.1でも動作します。ソリューションに感謝します。bootstrap.jsファイルを適切に機能するように変更しようとして、壁に頭をぶつけていました。
ジョエルキンゼル2014

2
私はすべてをできるだけ単純化しようとしていますが、大規模なWebサイト(政府のWebサイトなど)の複数レベルのナビゲーションを回避できない方法でこれを行う必要があります。
Troy Templeman 2017

1
マウスを移動する前にサブメニューが消えてしまうため、ホバリングが機能しません。ホバーではなく、クリックに依存していますが、正常に動作します。
Polv

61

@skellyソリューションは優れていますが、ホバー状態が機能しないため、モバイルデバイスでは機能しません。

BS 2.3.2の動作を元に戻すために、JSを少し追加しました。

PS:それはあなたがそこに着くCSSで動作します: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');
});

結果は私のWordPressテーマ(ページのトップ)にあります:http : //shprinkone.julienrenaux.fr/


5
あなたはこの投稿で最も賢い人です
user1143669

2
このソリューションは、デスクトップ上でホバー機能を維持したいことを考慮しておらず、サブメニューの2番目のレベルでも機能しません。これをより多くのレベルのサブメニューで機能させるには、最後の2行を次の行に変更し$(this).closest(".dropdown-submenu").toggleClass("open");ます。これは、リンクメニュー項目を開閉します。デスクトップ上でホバーを維持するには、ブラウザーのビューポート幅のチェックが必要であり、サイトごとに異なります。
edhedges、2015年

コードをありがとう。しかし、携帯電話ではコードにバグがあります。
jian dan

42

今日(2014年1月9日)まで、Bootstrap 3はまだサブメニューのドロップダウンをサポートしていません。

レスポンシブなナビゲーションメニューについてGoogleを検索しましたが、これが最高です。

それはスマートメニュー http://www.smartmenus.org/

これが、マルチレベルのサブメニューを備えたナビゲーションメニューが必要なすべての人にとっての方法であることを願っています。

更新2015-02-17スマートメニューは、サブメニューのBootstrap要素スタイルを完全にサポートするようになりました。詳細については、スマートメニューのウェブサイトをご覧ください。


PCでブートストラップをホバーし、複数のレベルのタブレットをクリックするのに苦労していました。あなたは私の一日を作りました!美しく動作します-ブートストラップとほとんど同じマークアップを使用します。ありがとうございました!:)
ヒッピー2014年

2
このソリューションは、ブートストラップ3と非常によく、フリーでオープンソースと仕事である
パトリック・デジャルダン

5
すごい!かんたん!Bootstrap 3統合の詳細については、こちらをご覧ください:vadikom.github.io/smartmenus/src/demo/bootstrap-navbar.html
manafire

1
スマートメニューは便利ですが、ナビゲーションバーでのみ機能し、単純なボタンドロップダウンでは機能しません。
Nikolai Prokoschenko 2014

1
uはプロジェクトを保存しました:-)
Sikander

5

Shprinkのコードは私に最も役立ちましたが、ドロップダウンが画面から消えないようにするために、次のように更新しました。

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-白いフォントと明るい背景が美しくありませんでした。

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

これが私と同じくらい人々に役立つことを願っています!

しかし、Bootstrapがサブ機能をできるだけ早く追加できることを願っています。



2

数日前にこの問題にぶつかった。私は多くの解決策を試しましたが、最終的にはどれも実際にはうまくいきませんでした。結局、ブートストラップのドロップダウンコードの拡張/オーバーライドを作成してしまいました。これは、closeMenus関数が変更された元のコードのコピーです。

ブートストラップjsのコアクラスに影響を与えないので、それは良いソリューションだと思います。

あなたはそれをgihubでチェックアウトできますhttps : //github.com/djokodonev/bootstrap-multilevel-dropdown


これは、マルチレベルドロップダウンの非常に優れたソリューションです。
huncyrus 2014年

私はあなたがそれを気に入ってうれしいです:-)
ジョージ・ドネフ14

-2

ドロップダウンの別のソリューションを作成します。これが役に立てば幸いこのjsスクリプトを追加するだけです

<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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.