
#gnavi > ul > li にhoverして、
・ドロップダウンメニュー(subnavi)が表示されるまで
・hoverがはずれてドロップダウンメニュー(subnavi)が消えるまで
少しの間だけドロップダウンメニューの表示が維持されるようにしたいです。
参考:https://www.kureha.co.jp/
【HTML】
<nav id="gnavi">
<ul>
<li>
<a href="javascript:;">タイトル</a>
<div class="subnavi">小カテゴリ</div>
</li>
<li>
<a href="javascript:;">タイトル</a>
<div class="subnavi">小カテゴリ</div>
</li>
</ul>
</nav>
【jQuery】
$(function(){
$(".subnavi").hide();
$("#header_bg").hide(); //画面全体にかかるマスク
$("#gnavi > ul > li").hover(function(){
$(".subnavi:not(:animated)", this).slideDown(500);$("#header_bg").stop().fadeIn();},
function(){
$(".subnavi",this).slideUp(100);
$("#header_bg").stop().fadeOut();
});
$("#gnavi > ul > li").click(function(){
$(".subnavi:not(:animated)", this).slideToggle(500);$("#header_bg").stop().fadeToggle();},
function(){
$(".subnavi",this).slideToggle(500);
$("#header_bg").stop().fadeToggle();
});
$("#header_bg").click(function(){
$(".subnavi").slideUp(100);
$("#header_bg").stop().fadeOut();
});
});
【CSS】
#gnavi > ul {
display: flex;
justify-content: space-between;
}
#gnavi > ul > li > a {
position: relative;
display: flex;
align-items: center;
box-sizing: border-box;
height: 65px;
padding: 0 1em;
font-size: 16px;
font-weight: bold;
line-height: 1.25em;
color: #000;
}
#gnavi > ul > li:hover > a,
#gnavi > ul > li > a:hover {
background: #000;
color: #fff;
}
#gnavi .subnavi {
display: none;
position: absolute;
top: 130px;
right: 0;
left: 0;
width: 100%;
margin: auto;
background: #fff;
}
#header_bg {
display: none;
position: absolute;
width: 100%;
height: 100%;
background: #000;
z-index: 40;
filter: alpha(opacity=70);
-moz-opacity: 0.70;
opacity: 0.70;
}
ご教示の程、宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No1です
お礼を読みましたが、
>ドロップダウンメニューが思った動きにならず…
最終的にどのようになさりたいのかわからないので、想像と推測でしかないのですが…
参考サイトとして挙げているもの(一番上のメニューだと思いますが)では、タイトルとカテゴリに当たる部分の隙間は無いものと推測しますが、表示レイアウト上で、「そこに敢えて空きを取りたい」ということでしょうか?
隙間をあけると、そこをマウスが通過する際にhoverのon/offが発生してしまうので、それなりに工夫が必要になると思われます。
以下、推測だらけなので当たるも八卦ですが、ご提示のCSSになるべく近い形で作成してみました。
・処理に直接には必関係のないCSSやクラス等は省いてあります。
・「#header_bg」やタイトルクリック時の処理は、ご提示の内容からでははっきりとしないので、あくまでもhover時の動作のみのサンプルにしてあります
・仕組みとしては、li要素を下方に延長することでカテゴリ表示と連続させ、mouseoutを発生させないようにするというものです。
・また、タイトル部分の表示変更については、CSSだけで行う方法ではなく、スクリプトからのクラス変更によって行われるように変えてあります。
以下のサンプルが、質問者様のなさりたいことに近いのかどうかはわかりませんが、ご参考までに。
(Chromeとfxで検証すみ)
※ タイトルとカテゴリの部分には要素の位置(範囲)がわかりやすくなるように仮の背景色を設定してありますが、CSSの下部2行を消せば背景色はなくなります。
※ また、この掲示板では、投稿文中のURLが自動変換されて省略されてしまうため、jQueryの読込み部分のCDNのURL以下は修正願います。
<!DOCTYPE HTML>
<html lang="ja">
<head><title>Sample</title>
<style type="text/css">
#navi { position:relative; }
#navi>ul {
list-style-type:none;
padding:0 15px;
display:flex;
justify-content:space-between;
}
#navi>ul>li { padding-bottom:50px; }
#navi>ul>li>a {
display:table-cell;
padding:0 1em;
height:65px;
overflow:hidden;
vertical-align: middle;
font-size:16px;
font-weight:bold;
color: #000;
}
#navi>ul>li>a.active {
background-color: #000;
color: #FFF;
}
#navi>ul>li>a+div {
display:none;
position:absolute;
top:115px; left:0;
width:100%;
}
#navi>ul>li>a { background-color:#F0F4F0; }
#navi>ul>li>a+div { background-color:#F0F0F8; height:150px; }
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.2. …
<script type="text/javascript">
$(()=>{
$('#navi>ul>li>a').on('mouseover', function(){
$(this).addClass('active').next('div').stop().slideDown(500);
});
$('#navi>ul>li').on('mouseleave', function(){
$('a', this).removeClass('active').next('div').stop().slideUp(100);
});
});
</script>
</head>
<body>
<nav id="navi">
<ul>
<li>
<a href="#">タイトル1</a>
<div>小カテゴリ1</div>
</li>
<li>
<a href="#">タイトル2</a>
<div>小カテゴリ2</div>
</li>
<li>
<a href="#">タイトル3</a>
<div>小カテゴリ3</div>
</li>
</ul>
</nav>
</body>
</html>
お返事が遅くなりすみません。
わざわざサンプルまで作っていただき、ありがとうございます…!
現状のままではやはり思ったような実装にはなりそうにありませんので、
再度見直してみようと思います。
丁寧に教えて頂き、本当にありがとうございます。
No.1
- 回答日時:
こんにちは
>hoverがはずれてドロップダウンメニュー(subnavi)が消えるまで
>少しの間だけドロップダウンメニューの表示が維持されるようにしたいです。
全体のUIがわからないので、上記質問に対する回答のみですが・・・
維持したい時間分だけdelay()で消すのを遅らせれば実現できると思います。
https://api.jquery.com/delay/
とは言え、いずれにしろ消えてしまうので、最終的にどのようなUIにしたいのかがさっぱりわかりません。
処理にも不要と思われる部分があったりするようなので、なんだか、一度全体を整理した方がよろしいのではないでしょうか?
ご回答ありがとうございます!
たしかに、delay()を追記することで遅延表示は可能でした。
ですが、素早くナビゲーション上を移動すると、画面全体にかかるマスクがちかちかしたりドロップダウンメニューが思った動きにならず…
jQueryの知識不足で思い通りの実装ができるかどうか不安ですが、一度、全体を見直してみようと思います。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クリックで表示、非表示するメ...
-
jQueryについて質問なのですが...
-
DOM の 要素の数え方について
-
オンマウスで画像ロールオーバ...
-
jQueryのhide,showで中の要素が...
-
CSSとJavaScriptを使ってドロッ...
-
ajaxローディングで取得したデ...
-
【JQuery】アコーディオンの入...
-
タブ切り替えの初期表示について
-
マウスカーソルを画像や文字に...
-
画像ランダム表示、しかしダブ...
-
新規ウインドウ+submit
-
JSPでの画像ファイル表示
-
CSSで親ボックスの背景画像を設...
-
イラストのボタンを押したとき...
-
【WEBデザイン】ディスプレイ環...
-
fontsize.jsでhtmlの大中小の設...
-
画像をクリックしたら別ウイン...
-
ホームページ 縦書き
-
classList で、class名が付かな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
同一ページ内で、任意の文字列...
-
タブ切り替えの初期表示について
-
ネストされたチェックボックス...
-
JQueryタブのアクティブ アン...
-
Jquery の slide.toggle で要素...
-
ホームページビルダー17のフ...
-
【javascript で動的に a タグ...
-
javascriptで正規表現の検索が...
-
JavascriptのDOMについて
-
javascript テキストエリアを1...
-
for(var i=0;...) の i の値を...
-
クリックで表示、非表示するメ...
-
jQueryで電卓を作っているのですが
-
js ライブラリ iscrollの利用に...
-
jquery ドロップダウンメニュー...
-
プルダウンのメニュー表示について
-
jQueryのhide,showで中の要素が...
-
gridstack.jsについて教えてく...
-
【HP制作】メールフォームの設...
おすすめ情報