ブートストラップ:ナビゲーションバー項目に対するドロップダウンメニューの位置


108

次のドロップダウンがあります

<label class="dropdown-toggle" role="button" data-toggle="dropdown" data-target="#">
    Action <b class="caret"></b></label>
<ul class="dropdown-menu" role="menu" aria-labelledby="lang-selector" id="lang-selector">
    dropdown content goes here
</ul>

ドロップダウンの左上隅がテキストの左下隅(アクション)ですが、ドロップダウンの右上隅の位置がテキストの右下の位置にあることを願っています。どうやってやるの?

回答:


229

これは私たちが達成しようとしている効果です:

右揃えのメニュー

適用する必要のあるクラスは、Bootstrap 3.1.0のリリースで変更され、Bootstrap 4のリリースでも変更されています。以下のソリューションのいずれかが機能していないようであれば、インポートするBootstrapのバージョン番号を再確認してくださいそして別のものを試してください。

ブートストラップ3

v3.1.0より前

pull-rightクラスを使用して、メニューの右側にキャレットを並べることができます。

<li class="dropdown">
  <a class="dropdown-toggle" href="#">Link</a>
  <ul class="dropdown-menu pull-right">
     <li>...</li>
  </ul>
</li>

フィドル:http : //jsfiddle.net/joeczucha/ewzafdju/

v3.1.0以降

v3.1.0以降、ドロップダウンメニューの.pull-rightを廃止しました。メニューを右揃えにするには、.dropdown-menu-rightを使用します。ナビゲーションバーの右揃えのナビゲーションコンポーネントは、このクラスのミックスインバージョンを使用して、メニューを自動的に配置します。上書きするには、.dropdown-menu-leftを使用します。

dropdown-rightクラスを使用して、メニューの右側にキャレットを並べることができます。

<li class="dropdown">
  <a class="dropdown-toggle" href="#">Link</a>
  <ul class="dropdown-menu dropdown-menu-right">
     <li>...</li>
  </ul>
</li>

フィドル:http : //jsfiddle.net/joeczucha/1nrLafxc/

ブートストラップ4

Bootstrap 4のクラスはBootstrap> 3.1.0と同じですが、周囲のマークアップの残りの部分が少し変更されていることに注意してください。

<li class="nav-item dropdown">
  <a class="nav-link dropdown-toggle" href="#">
    Link
  </a>
  <div class="dropdown-menu dropdown-menu-right">
    <a class="dropdown-item" href="#">...</a>
  </div>
</li>

フィドル:https : //jsfiddle.net/joeczucha/f8h2tLoc/


1
RTLウェブサイトでプルライトとプルレフトをテストしました。それらは完璧に機能しますが、dropdown-menu-rightとdropdown-menu-leftは機能しません。
好奇心が強い

コンテナー(.dropdown)には「inline-bock」の表示が必要です。この例ではLIは問題ありませんが、DIVの場合、配置はサブメニューの幅の影響を受けるブロック要素の最後に配置されます。
ニコラス

「dropdown-menu-right」クラスは、Bootstrap 4(ベータ版)でも同様の効果を発揮しました。ありがとう!「プルライト」は機能しませんでした。
Andreas Vogl 2017年

class="dropdown"適切な調整を行うには、使用が鍵でした
Louis

50

他の人がこの問題をどのように解決するのか、またはBootstrapにこのための構成があるかどうかはわかりません。

私は解決策を提供するこのスレッドを見つけました:

https://github.com/twbs/bootstrap/issues/1411

投稿の1つは、

<ul class="dropdown-menu" style="right: 0; left: auto;">

私はテストし、それは動作します。

Bootstrapが上記のcss経由ではなく、これを行うための設定を提供しているかどうかを確認してください。

乾杯。


1
ありがとう、これはナビゲーションバーのブートストラップ4ドロップダウンで機能しました
Petru Lebada 2018年

20

Bootstrapドキュメントに基づく:

v3.1.0以降、ドロップダウンメニューで.pull-rightが廃止されました。.dropdown-menu-rightを使用

例えば:

<ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="dLabel">

1
RTLウェブサイトでプルライトとプルレフトをテストしました。それらは完璧に機能しますが、dropdown-menu-rightとdropdown-menu-leftは機能しません。
curious1 2015年

10

メニューを表示したい場合は、「dropup」クラスを追加
し、同じdivから「dropdown」クラスが存在する場合は削除してください。

<div class="btn-group dropup">

ここに画像の説明を入力してください


1
「ドロップドウォンの右上隅の位置がテキストの右下にあることを願っています」-OP
Joe Czucha

コメントがわかりません。ごめんなさい!
Philip Enc 2016年

見た目は良いですが、どうすれば自動化できますか?私がデータのリストを持っているように、下部はわかりません。
Santosh

2

遅くても誰かを助けられるといいな。ドロップダウンメニューまたはサブメニューが画面の右側にある場合は左側で開きます。メニューまたはサブメニューが左側にある場合は右側で開きます。

$(".dropdown-toggle").on("click", function(event){//"show.bs.dropdown"
    var liparent=$(this.parentElement);
    var ulChild=liparent.find('ul');
    var xOffset=liparent.offset().left;
    var alignRight=($(document).width()-xOffset)<xOffset;


    if (liparent.hasClass("dropdown-submenu"))
    {
        ulChild.css("left",alignRight?"-101%":"");
    }
    else
    {                
        ulChild.toggleClass("dropdown-menu-right",alignRight);
    }

});

垂直位置を検出するために、追加することもできます

$( document ).ready(function() {
        var liparent=$(".dropdown");
    var yOffset=liparent.offset().top;
        var toTop=($(document).height()-yOffset)<yOffset;
    liparent.toggleClass("dropup",toTop);
});

https://jsfiddle.net/jd1100/rf9zvdhg/28/


上下とも調整できますか?ドロップダウンリンクが下にある場合、上方向に開きますか?これを達成できますか?
Santosh

1
垂直位置を検出するために回答を更新しましたか?
JD11、19年

1

Boostrapにはと呼ばれるクラスがありnavbar-rightます。したがって、コードは次のようになります。

<ul class="nav navbar-right">
    <li class="dropdown">
      <a class="dropdown-toggle" href="#" data-toggle="dropdown">Link</a>
      <ul class="dropdown-menu">
         <li>...</li>
      </ul>
    </li>
</ul>

0

ドロップダウンを中央に配置したい場合、これが解決策です。

<ul class="dropdown-menu" style="right:auto; left: auto;">
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.