Bootstrap のドロップダウン メニューの簡単な紹介
この記事では、Bootstrap のドロップダウン メニューについて詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
Web ページを操作するときは、コンテキスト メニューや非表示/表示メニュー項目が必要になることがよくあります。Bootstrap には、リンク リストを表示するための切り替え可能なコンテキスト メニューがデフォルトで用意されています。また、さまざまな対話状態でのメニュー表示は、JavaScript プラグインと併用する必要があります。 [関連する推奨事項: "bootstrap チュートリアル "]
使用方法
Bootstrap フレームワークのドロップダウン メニューを使用する場合は、次のことを行う必要があります。ブートストラップ フレームワークの bootstrap.js ファイルによって提供されるドロップダウン メニューを呼び出します。もちろん、コンパイルされていないバージョンを使用している場合は、js フォルダーに「dropdown.js」という名前のファイルがあり、この js ファイルを
と呼ぶこともできます。ブートストラップのコンポーネントの相互作用効果はすべて A に依存するためです。このプラグインは jQuery ライブラリによって作成されるため、bootstrap.js を使用する前に jquery.js をロードして効果を発揮する必要があります。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </body> </html>
基本的な使い方
Bootstrap を使用する場合Framework ドロップダウン メニュー コンポーネントを使用する場合、その構造を正しく使用することが非常に重要です。構造とクラス名が正しく使用されないと、コンポーネントが正常に使用できるかどうかに直接影響します。
1. 「dropdown」という名前のコンテナを使用します。 ドロップダウン メニュー要素全体をラップします。
<div class="dropdown"></div>
2.
<button class="btn dropdown-toggle" type="button" data-toggle="dropdown">
と同じである必要があります。 3. ドロップダウン メニュー項目に ul リストを使用し、クラス名 "dropdown-menu" を定義します。
<ul class="dropdown-menu" role="menu">
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> Dropdown <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> </ul> </div>
4. ドロップダウン メニューの親要素に .dropup
クラスを設定すると、メニューをポップアップ表示させることができます (デフォルトはポップダウンです)
<div class="dropup"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> Dropup <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> </ul> </div>
Principle Analysis
Bootstrap フレームワークのドロップダウン メニュー コンポーネント、そのドロップダウン「ドロップダウン メニュー」のデフォルト スタイルが「表示:なし」に設定されているため、ダウン メニュー項目はデフォルトで非表示になります。ユーザーがクリックしたとき。親メニュー項目が選択されているとき、ドロップダウン メニューが表示されます。ユーザーがクリックしたとき。繰り返しますが、ドロップダウン メニューは引き続き非表示になります
.dropdown-menu { position: absolute;/*设置绝对定位,相对于父元素div.dropdown*/ top: 100%;/*让下拉菜单项在父菜单项底部,如果父元素不设置相对定位,该元素相对于body元素*/ left: 0; z-index: 1000;/*让下拉菜单项不被其他元素遮盖住*/ display: none;/*默认隐藏下拉菜单项*/ float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; font-size: 14px; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .15); border-radius: 4px; -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); box-shadow: 0 6px 12px rgba(0, 0, 0, .175); }
[実装原則]
1. Web ページが読み込まれるときにドロップダウン プラグインが読み込まれ、すべての要素のイベント バインディングが行われます。 with data-toggle="dropdown" style
2. ユーザーが data-toggle="dropdown" スタイルのリンクまたはボタンをクリックすると、JavaScript イベント コードがトリガーされます
3. 追加JavaScript イベント コードで親コンテナに .open スタイルを追加します
# 4. デフォルトで非表示になっている .dropdown-menu メニューは、外部に .open スタイルを設定した後に表示できます。期待される効果を達成するには 5. ユーザーがもう一度クリックすると、「p.dropdown」コンテナ内のクラス名「open」が再び削除されます.open > .dropdown-menu { display: block; }
<button class="btn dropdown-toggle" type="button" data-toggle="dropdown" data-target="#dropdown1">外部触发器</button> <div class="dropdown" id="dropdown1"> <ul class="dropdown-menu" role="menu" aria-labelledby="tutorial"> <li role="presentation"><a href="##">HTML</a></li> <li role="presentation"><a href="##">CSS</a></li> <li role="presentation"><a href="##">javascript</a></li> </ul> </div>
拡張使用法
[区切り文字] ブートストラップ フレームワークのドロップダウン メニューにはドロップダウン区切り文字が用意されています。ドロップダウン メニューに 2 つのグループがあると仮定すると、次のようになります。グループとグループ 空の.dropdown-menu .divider { height: 1px; margin: 9px 0; overflow: hidden; background-color: #e5e5e5; }
<li role="separator" class="divider"></li>

Bootstrap フレームワークのドロップダウン メニューはデフォルトで左揃えになっています。ドロップダウン メニューを親コンテナに対して右揃えにしたい場合は、「dropdown-menu-right」クラス名を追加できます。 to "dropdown-menu"
<li class="dropdown-header">Dropdown header</li>

.dropdown-header { display: block; padding: 3px 20px; font-size: 12px; line-height: 1.42857143; color: #999; }
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> Dropdown <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1"> <li role="presentation" class="dropdown-header">第一部分菜单头部</li> <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li> <li role="presentation" class="divider"></li> <li role="presentation" class="dropdown-header">第二部分菜单头部</li> <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li> </ul> </div>
下拉菜单项的默认的状态有悬浮状态(:hover)和焦点状态(:focus)
.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { color: #262626; text-decoration: none; background-color: #f5f5f5; }
下拉菜单项除了上面两种状态,还有当前状态(.active)和禁用状态(.disabled)。这两种状态使用方法只需要在对应的菜单项上添加对应的类名
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"> Dropdown <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1"> <li role="presentation" class="active"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li> <li role="presentation"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li> <li role="presentation" class="divider"></li> <li role="presentation" class="disabled"><a role="menuitem" tabindex="-1" href="#">下拉菜单项</a></li> </ul> </div>
JS触发
和模态弹出窗一样,Bootstrap框架中的下拉菜单也支持JavaScript方法触发下拉菜单显示。但是,要特点注意的是,即使使用JS触发,也不能去掉触发元素的data-toggle="dropdown"
<div class="dropdown"> <button class="btn dropdown-toggle" data-toggle="dropdown" type="button">触发器</button> <ul class="dropdown-menu" role="menu" aria-labelledby="tutorial"> <li role="presentation"><a href="##">HTML</a></li> <li role="presentation"><a href="##">CSS</a></li> <li role="presentation"><a href="##">javascript</a></li> </ul> </div> <script> ;$(function(){ $('.dropdown-toggle').dropdown() }); </script>
【toggle】
和Modal一样,dropdown也接收字符串作为参数进行传递,参数可以是"toggle"
但是,这非常不好用。每次单击都要两次toggle,就会一直是一个不变的状态。所以,一般情况下,使用不带参数的方法。就算需要使用参数“toggle”,也建议使用jQuery的one方法
$(".dropdown-toggle").one("click",function(){ $(this).dropdown("toggle"); })
【事件订阅】
与Modal类似,下拉菜单支持4种类型的事件订阅,分别对应下拉菜单的弹出前、弹出后、关闭前、关闭后
show.bs.dropdown 在show方法调用时立即触发(尚未显示之前) shown.bs.dropdown 在下拉菜单完全显示给用户之后(并且等CSS动画完成之后)触发 hide.bs.dropdown 在hide方法调用时(但还未关闭隐藏)立即触发 hidden.bs.dropdown 在下拉菜单完全隐藏之后(并且等CSS动画完成之后)触发
<div class="dropdown"> <button class="btn dropdown-toggle" data-toggle="dropdown" type="button">触发器</button> <ul class="dropdown-menu" role="menu" aria-labelledby="tutorial"> <li role="presentation"><a href="##">HTML</a></li> <li role="presentation"><a href="##">CSS</a></li> <li role="presentation"><a href="##">javascript</a></li> </ul> </div> <script> ;$(function(){ $('.dropdown').on('show.bs.dropdown',function(){ $('.dropdown-toggle').html('关闭'); }); $('.dropdown').on('hide.bs.dropdown',function(){ $('.dropdown-toggle').html('打开'); }); }); </script>
JS源码
【1】IIFE
使用立即调用函数,防止插件内代码外泄,从而形成一个闭环,并且只能从jQuery的fn里进行扩展
+function ($) { //使用es5严格模式 'use strict'; // }(window.jQuery);
【2】初始设置
//弹出下拉菜单时的蒙版样式 var backdrop = '.dropdown-backdrop' //dropdown触发元素的自定义属性 var toggle = '[data-toggle="dropdown"]' var Dropdown = function (element) { //插件类函数定义,一旦触发,就在click事件上绑定toggle,所以不能再用自定义代码进行toggle了 $(element).on('click.bs.dropdown', this.toggle) } //版本号为'3.3.7' Dropdown.VERSION = '3.3.7'
【3】插件核心代码
//获取下拉菜单的父元素容器 function getParent($this) { //获取触发元素的'data-target'特性值,表示下拉菜单的父元素容器的选择器 var selector = $this.attr('data-target') //如果触发元素没有设置'data-target' if (!selector) { //获取触发元素的'href'特性值,表示下拉菜单的父元素容器的选择器 selector = $this.attr('href') //该值是所弹出元素的id值 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } //通过选择器,来获取下拉菜单的父元素容器 var $parent = selector && $(selector) //如果找到,说明触发元素确实在下拉菜单外部,则返回找到的下拉菜单的父元素容器即可 //如果没有找到,说明触发元素在下拉菜单内部,则返回它的直接父级元素 return $parent && $parent.length ? $parent : $this.parent() } //关闭所有的下拉菜单 function clearMenus(e) { //如果点击的是鼠标右键,则直接返回 if (e && e.which === 3) return //删除用于移动设备的蒙版 $(backdrop).remove() //根据选择器,遍历所有的dropdown标记,然后全部关闭 $(toggle).each(function () { var $this = $(this) var $parent = getParent($this) var relatedTarget = { relatedTarget: this } //如果下拉菜单的父元素容器没有open类名,则直接返回 if (!$parent.hasClass('open')) return //如果触发了鼠标单击事件,并且鼠标事件的目标元素是input或textarea,则直接返回 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return //关闭前,触发hide事件 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) //如果阻止了默认行为,则直接返回 if (e.isDefaultPrevented()) return $this.attr('aria-expanded', 'false') //关闭后,触发hidden事件 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) }) } //控制下拉菜单的打开、关闭操作 Dropdown.prototype.toggle = function (e) { var $this = $(this) //如果有禁用标记,则不处理 if ($this.is('.disabled, :disabled')) return //获取下拉菜单的父元素容器 var $parent = getParent($this) //判断下拉菜单的父元素容器是否有open样式 var isActive = $parent.hasClass('open') //关闭所有的下拉菜单 clearMenus() //如果是,在clearMenus阶段已经关闭了,所以不需要再次关闭 //如果不是,说明默认是关闭状态,则需要展开下拉菜单 if (!isActive) { //如果是移动设置,则使用dropdown-backdrop样式,因为移动设备不支持click单击委托 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { $(document.createElement('div')) .addClass('dropdown-backdrop') .insertAfter($(this)) .on('click', clearMenus) } var relatedTarget = { relatedTarget: this } //展开下拉菜单前,触发show事件 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) //如果阻止了默认行为,则直接返回 if (e.isDefaultPrevented()) return $this //设置focus样式 .trigger('focus') .attr('aria-expanded', 'true') $parent //设置open样式 .toggleClass('open') //展开下拉菜单后,触发shown事件 .trigger($.Event('shown.bs.dropdown', relatedTarget)) } return false } //利用键盘控制下拉菜单 Dropdown.prototype.keydown = function (e) { //如果按键不是esc、或上下方向键、或空格键,或者目标元素是input或textarea控件,则忽略处理 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return var $this = $(this) //阻止默认行为及冒泡 e.preventDefault() e.stopPropagation() //如果有禁用标记,则不做处理 if ($this.is('.disabled, :disabled')) return //获取下拉菜单的父元素容器 var $parent = getParent($this) //判断父元素是否有open样式 var isActive = $parent.hasClass('open') //如果有open样式并且按键不是向下箭头,或者没有open样式并且按键是向下箭头,也打开下拉菜单 if (!isActive && e.which != 27 || isActive && e.which == 27) { //如果按下向下箭头,则给触发元素加上焦点 if (e.which == 27) $parent.find(toggle).trigger('focus') //触发单击事件 return $this.trigger('click') } //返回可以利用箭头选择的下拉菜单项 //必须是可见的a链接,并且不包括分隔符 var desc = ' li:not(.disabled):visible a' var $items = $parent.find('.dropdown-menu' + desc) //如果没有,则不做处理 if (!$items.length) return //找出当前处理焦点状态的第一个下拉菜单项的索引 var index = $items.index(e.target) //按向上箭头,index-1 if (e.which == 38 && index > 0) index-- //按向下箭头,index+1 if (e.which == 40 && index < $items.length - 1) index++ //当index为-1时,置为0 if (!~index) index = 0 //给所选择的菜单项设置焦点 $items.eq(index).trigger('focus') }
【4】jQuery插件定义
function Plugin(option) { //根据选择器,遍历所有符合规则的元素 return this.each(function () { var $this = $(this) //获取自定义属性bs.dropdown的值 var data = $this.data('bs.dropdown') //如果值不存在,则将Dropdown实例设置为bs.dropdown值 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) //如果option传递了string,则表示要执行某个方法 if (typeof option == 'string') data[option].call($this) }) } var old = $.fn.dropdown //保留其他库的$.fn.modal代码(如果定义的话),以便在noConflict之后可以继续使用该老代码 $.fn.dropdown = Plugin //重设插件构造器,可以通过该属性获取插件的真实类函数 $.fn.dropdown.Constructor = Dropdown
【5】防冲突处理
$.fn.dropdown.noConflict = function () { //恢复以前的旧代码 $.fn.dropdown = old //将$.fn.dropdown.noConflict()设置为Bootstrap的Dropdown插件 return this }
【6】绑定触发事件
$(document) //为声明式的HTML绑定单击事件,在单击以后先关闭所有的下拉菜单 .on('click.bs.dropdown.data-api', clearMenus) //如果内部有form元素,则阻止冒泡,不做其他处理 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) //绑定单击事件,执行toggle()方法 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) //绑定键盘keydown事件,执行keydown()方法 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) //为dropdown-menu绑定键盘keydown事件,执行keydown()方法 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
更多编程相关知识,请访问:编程入门!!
以上がBootstrap のドロップダウン メニューの簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ブートストラップを使用して垂直センタリングを実装します。FlexBoxメソッド:D-Flex、Justify-Content-Center、Align-Items-Centerクラスを使用して、FlexBoxコンテナに要素を配置します。 ALIGN-ITEMS-CENTERクラス方法:FlexBoxをサポートしていないブラウザの場合、親要素の高さが定義されている場合、Align-Items-Centerクラスを使用します。

ブートストラップを使用して検索バーの値を取得する方法:検索バーのIDまたは名前を決定します。 JavaScriptを使用してDOM要素を取得します。要素の値を取得します。必要なアクションを実行します。

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

Bootstrapフレームワークをセットアップするには、次の手順に従う必要があります。1。CDNを介してブートストラップファイルを参照してください。 2。独自のサーバーでファイルをダウンロードしてホストします。 3。HTMLにブートストラップファイルを含めます。 4.必要に応じてSASS/LESSをコンパイルします。 5。カスタムファイルをインポートします(オプション)。セットアップが完了したら、Bootstrapのグリッドシステム、コンポーネント、スタイルを使用して、レスポンシブWebサイトとアプリケーションを作成できます。

ブートストラップスプリットラインを作成するには2つの方法があります。タグを使用して、水平方向のスプリットラインを作成します。 CSS Borderプロパティを使用して、カスタムスタイルのスプリットラインを作成します。

回答:ブートストラップの日付ピッカーコンポーネントを使用して、ページで日付を表示できます。手順:ブートストラップフレームワークを紹介します。 HTMLで日付セレクター入力ボックスを作成します。ブートストラップは、セレクターにスタイルを自動的に追加します。 JavaScriptを使用して、選択した日付を取得します。
