ブートストラップv4にナビゲーションバードロップダウンホバーを実装する方法

改善:

新しいブートストラップバージョンでは、ドロップダウンメニューがdivに変更されたため、少し混乱しています。

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="#">Navbar</a>
  <div class="collapse navbar-collapse" id="navbarNavDropdown">
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Pricing</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown link
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
    </ul>
  </div>
</nav>

スクリプトコードを追加せずに、スニペットのドロップダウンリンクにホバードロップダウンを表示するアイデアはありますか(CSSとブートストラップのスクリプトのみ)。私はすでにブートストラップcssクラスを見たので、ブートストラップV3のクラスと関連付けることができません(V3にjqueryを追加せずにこれを実現します)。

人:

シンプルなCSSのみのソリューション:

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

クリックすると、クラスがshow切り替えられます(ホバーされなくなっても開いたままになります)。


これを回避するには、適切には、ポインタベースのデバイスに予約されたイベントとプロパティを使用することです:jQueryのをmouseentermouseleave:hoverタッチベースのデバイスでのドロップダウンの動作にまったく影響与えずに、スムーズに、直感的に機能する必要があります。試してみて、うまくいくかどうか教えてください。

完全なjQueryソリューションそのままのタッチ):

v4.1.2より前のソリューション(非推奨):

$('body').on('mouseenter mouseleave','.dropdown',function(e){
  var _d=$(e.target).closest('.dropdown');
  if (e.type === 'mouseenter')_d.addClass('show');
  setTimeout(function(){
    _d.toggleClass('show', _d.is(':hover'));
    $('[data-toggle="dropdown"]', _d).attr('aria-expanded',_d.is(':hover'));
  },300);
});

$('body').on('mouseenter mouseleave','.dropdown',function(e){
  var _d=$(e.target).closest('.dropdown');
  if (e.type === 'mouseenter')_d.addClass('show');
  setTimeout(function(){
    _d.toggleClass('show', _d.is(':hover'));
    $('[data-toggle="dropdown"]', _d).attr('aria-expanded',_d.is(':hover'));
  },300);
});

/* this is not needed, just prevents page reload when a dd link is clicked */
$('.dropdown a').on('click tap', e => e.preventDefault())
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href>Navbar</a>
  <div class="collapse navbar-collapse" id="navbarNavDropdown">
    <ul class="navbar-nav">
      <li class="nav-item active">
        <a class="nav-link" href>Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href>Features</a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href>Pricing</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown link
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
          <a class="dropdown-item" href>Action</a>
          <a class="dropdown-item" href>Another action</a>
          <a class="dropdown-item" href>Something else here</a>
        </div>
      </li>
    </ul>
  </div>
</nav>


v4.1.2シップリストでドロップダウンの動作にこの変更導入され、上記のソリューションは機能しなくなりました。
以下は、v4.1.2以降でホバー時にドロップダウンを開くための最新のソリューションです

function toggleDropdown (e) {
  const _d = $(e.target).closest('.dropdown'),
    _m = $('.dropdown-menu', _d);
  setTimeout(function(){
    const shouldOpen = e.type !== 'click' && _d.is(':hover');
    _m.toggleClass('show', shouldOpen);
    _d.toggleClass('show', shouldOpen);
    $('[data-toggle="dropdown"]', _d).attr('aria-expanded', shouldOpen);
  }, e.type === 'mouseleave' ? 300 : 0);
}

$('body')
  .on('mouseenter mouseleave','.dropdown',toggleDropdown)
  .on('click', '.dropdown-menu a', toggleDropdown);

function toggleDropdown (e) {
  const _d = $(e.target).closest('.dropdown'),
      _m = $('.dropdown-menu', _d);
  setTimeout(function(){
    const shouldOpen = e.type !== 'click' && _d.is(':hover');
    _m.toggleClass('show', shouldOpen);
    _d.toggleClass('show', shouldOpen);
    $('[data-toggle="dropdown"]', _d).attr('aria-expanded', shouldOpen);
  }, e.type === 'mouseleave' ? 300 : 0);
}

$('body')
  .on('mouseenter mouseleave','.dropdown',toggleDropdown)
  .on('click', '.dropdown-menu a', toggleDropdown);

/* not needed, prevents page reload for SO example on menu link clicked */
$('.dropdown a').on('click tap', e => e.preventDefault())
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
    <form class="form-inline my-2 my-lg-0">
      <input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
      <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
    </form>
  </div>
</nav>


重要な注意: jQueryソリューションを使用している場合は、CSSを削除することが重要です(または、を.dropdown-toggleクリックしたとき、またはメニューオプションをクリックしたときにドロップダウンが閉じません)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ブートストラップv4にナビゲーションバードロップダウンホバーを実装する方法

分類Dev

RTLブートストラップ4ナビゲーションバーを実装する方法は?

分類Dev

ブートストラップナビゲーションバーのドロップダウンをインラインに適合させる方法

分類Dev

マルチレベルドロップダウンサブメニューを使用してBootstrapv4にナビゲーションバードロップダウンホバーを実装するにはどうすればよいですか?

分類Dev

ホバー時にドロップダウンが表示されないブートストラップナビゲーションバー

分類Dev

ブートストラップナビゲーションバーのドロップダウンエラー

分類Dev

ブートストラップ4ベータナビゲーションバーにロゴを追加する

分類Dev

モバイルでない場合は、ホバーでのブートストラップナビゲーションバードロップダウン

分類Dev

ブートストラップ4.1ナビゲーションバーのドロップダウン配置

分類Dev

ブートストラップ3ドロップダウンナビゲーションバー

分類Dev

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

分類Dev

ブートストラップ4ナビゲーションバーにngbDropdownを追加する方法

分類Dev

ブートストラップナビゲーションバーにロゴを配置する方法

分類Dev

ブートストラップナビゲーションバーのドロップダウンに関する問題

分類Dev

ブートストラップ4-スクロール時に固定トップナビゲーションバーを非表示にする方法

分類Dev

コンテンツをプッシュダウンするブートストラップ4ナビゲーションバー

分類Dev

ブートストラップナビゲーションメニューのホバードロップダウンの問題

分類Dev

ドロップダウン位置の問題があるブートストラップ4-alpha-2ナビゲーションバー

分類Dev

スクロール後にブートストラップナビゲーションバーを修正する

分類Dev

ブートストラップナビゲーションバーのドロップダウンメニューの形状を変更します

分類Dev

ナビゲーションバーでホバーにトップラインを設定する方法

分類Dev

Reactブートストラップナビゲーションバー:ナビゲーションバーアイテムを右揃えにする方法

分類Dev

Safariのドロップダウンに基づくブートストラップナビゲーションバーのブランド重量の変更

分類Dev

デスクトップ上のブートストラップ4ナビゲーションドロップダウンホバー/モバイルをクリック

分類Dev

ブートストラップ4ナビゲーションバーのドロップダウンメニュー項目

分類Dev

ブートストラップ4のナビゲーションバードロップダウンメニュー

分類Dev

ブートストラップ3のナビゲーションタブでドロップダウンコンテンツを作成する方法は?

分類Dev

ブートストラップ-ナビゲーションバーを背景画像の上に配置する方法は?

分類Dev

ブートストラップ4ナビゲーションバーホバーBGカラー

Related 関連記事

  1. 1

    ブートストラップv4にナビゲーションバードロップダウンホバーを実装する方法

  2. 2

    RTLブートストラップ4ナビゲーションバーを実装する方法は?

  3. 3

    ブートストラップナビゲーションバーのドロップダウンをインラインに適合させる方法

  4. 4

    マルチレベルドロップダウンサブメニューを使用してBootstrapv4にナビゲーションバードロップダウンホバーを実装するにはどうすればよいですか?

  5. 5

    ホバー時にドロップダウンが表示されないブートストラップナビゲーションバー

  6. 6

    ブートストラップナビゲーションバーのドロップダウンエラー

  7. 7

    ブートストラップ4ベータナビゲーションバーにロゴを追加する

  8. 8

    モバイルでない場合は、ホバーでのブートストラップナビゲーションバードロップダウン

  9. 9

    ブートストラップ4.1ナビゲーションバーのドロップダウン配置

  10. 10

    ブートストラップ3ドロップダウンナビゲーションバー

  11. 11

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

  12. 12

    ブートストラップ4ナビゲーションバーにngbDropdownを追加する方法

  13. 13

    ブートストラップナビゲーションバーにロゴを配置する方法

  14. 14

    ブートストラップナビゲーションバーのドロップダウンに関する問題

  15. 15

    ブートストラップ4-スクロール時に固定トップナビゲーションバーを非表示にする方法

  16. 16

    コンテンツをプッシュダウンするブートストラップ4ナビゲーションバー

  17. 17

    ブートストラップナビゲーションメニューのホバードロップダウンの問題

  18. 18

    ドロップダウン位置の問題があるブートストラップ4-alpha-2ナビゲーションバー

  19. 19

    スクロール後にブートストラップナビゲーションバーを修正する

  20. 20

    ブートストラップナビゲーションバーのドロップダウンメニューの形状を変更します

  21. 21

    ナビゲーションバーでホバーにトップラインを設定する方法

  22. 22

    Reactブートストラップナビゲーションバー:ナビゲーションバーアイテムを右揃えにする方法

  23. 23

    Safariのドロップダウンに基づくブートストラップナビゲーションバーのブランド重量の変更

  24. 24

    デスクトップ上のブートストラップ4ナビゲーションドロップダウンホバー/モバイルをクリック

  25. 25

    ブートストラップ4ナビゲーションバーのドロップダウンメニュー項目

  26. 26

    ブートストラップ4のナビゲーションバードロップダウンメニュー

  27. 27

    ブートストラップ3のナビゲーションタブでドロップダウンコンテンツを作成する方法は?

  28. 28

    ブートストラップ-ナビゲーションバーを背景画像の上に配置する方法は?

  29. 29

    ブートストラップ4ナビゲーションバーホバーBGカラー

ホットタグ

アーカイブ