これが私が目指しているものの例です:
li
イベントを正しく発生させるために、要素をクラスで装飾する必要はありません。入れ子になったカテゴリ ドロップダウンが複数ある場合はどうなりますか? 物事はすぐに乱雑になります!
また、イベント キャプチャ エリアを離れるとすぐに閉じずにオプションを選択できないようです。
巧妙に作成されたドロップ ダウン ナビゲーション メニューを作成する方法について何か提案はありますか?
これが私が目指しているものの例です:
li
イベントを正しく発生させるために、要素をクラスで装飾する必要はありません。入れ子になったカテゴリ ドロップダウンが複数ある場合はどうなりますか? 物事はすぐに乱雑になります!
また、イベント キャプチャ エリアを離れるとすぐに閉じずにオプションを選択できないようです。
巧妙に作成されたドロップ ダウン ナビゲーション メニューを作成する方法について何か提案はありますか?
セレクターを巧妙に使用するクラスは本当に必要ありません:P
例を使ってフィドルを設定しました。コードは次のとおりです。
HTML:
<nav>
<ul>
<li><a href="#">HOME</a></li>
<li>
<a href="#">OFFERS</a>
<ul>
<li>
<a href="#">NEW</a>
<ul>
<li>YAY!</li>
</ul>
</li>
</ul>
</li>
<li><a href="#">SETTINGS</a></li>
<li><a href="#">TV's</a></li>
<li><a href="#">COMPUTERS</a></li>
<li><a href="#">RICE</a></li>
</ul>
</nav>
ご覧のとおり、単一のクラス/ID は必要ありませんでした:P 要素「OFFERS」はドロップダウン メニューを持つ唯一の要素であり、そのメニュー内の要素「NEW」には別の要素があります。
CSS:
li > ul { display: none; }
li li { margin-left: 10px; }
最初のスタイルが重要です。まず、サブメニューを非表示にします。もう 1 つのスタイルは、わかりやすくするためのものです。
jQuery:
$("nav ul li").hover(function(){
if ($("> ul", this).length > 0) {
$("> ul", this).show();
}
}, function(){
if ($("> ul", this).length > 0) {
$("> ul", this).hide();
}
});
はい、それと同じくらい簡単です:)hover
メニュー要素を作成するとき、ul
直接の子があるかどうかを確認し、ある場合は表示します。メニュー要素を離れるときに、ul
直接の子があるかどうかを再度確認し、ある場合は非表示にします。
もちろん、これをスタイルアップし、 any 内の any フロートをクリアする必要がありますli
。
フローを適切に制御するには、クラスを使用する必要があります。特にあなたの外箱に。
たとえば、私のメニューでは、ul
すべてのメニューを含む があり、各メニュー項目はli
です。の内部には、サブメニューを含むli
別のタイトルとともに、第 1 レベルのタイトルがあります。ul
<ul class="menu">
<li>
Item 1
<ul><!--Further items--></ul>
</li>
<li>
Item 2
<ul><!--Further items--></ul>
</li>
</ul>
その後、子セレクターを使用してこれを制御できます。単純にクラスを使用する方が簡単な場合もありますが。
$(".menu > li") //First level items
$(".menu > li > ul") //Submenus
最初のレベルの項目の 1 つをクリックしたときに、メニューを下にスライドさせたいとします。
$(".menu > li").click(function() {
$this = $(this); //Caching. Not really needed for this example. But anyway :)
$this.children("ul").slideToggle("fast");
});
$(document).ready( function(){
$("ul.MenuNavi li").mouseover(function(){
$(this).children('ul').slideDown('3000');
});
$("ul.MenuNavi li").mouseleave(function(){
$(this).children('ul').stop(true).slideUp('3000');
});
});