質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

hover

これは、HTMLの 擬似クラス[hover]に関するタグです。Hoverは与えられた要素へマウスカーソルを置くことを意味します。また、タッチ可能なデバイスでユーザーが要素へタッチすることをHoverと呼ぶ場合もあります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

810閲覧

アコーディオンメニューがうまく動きません。

yuko2430

総合スコア9

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

hover

これは、HTMLの 擬似クラス[hover]に関するタグです。Hoverは与えられた要素へマウスカーソルを置くことを意味します。また、タッチ可能なデバイスでユーザーが要素へタッチすることをHoverと呼ぶ場合もあります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

メニュー

メニューは、UIにおける仕組みであり、ユーザに機能の表示と実行する手段を与えます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2021/02/16 08:12

お世話になります。
アコーディオンメニューを作成しましたが、うまく出来ないので、以下2点ご教示いただければと思います。
①現在作成したアコーディオンメニューですが、メニュー1をクリックすると、サブメニューはでてくるのですが、他のメニューも動いてしまいます。(サブメニュー自体は出てきませんが、背景が伸びてきます)メニュー1ならメニュー1のサブメニューだけ動いてほしいです。
②クリックからhoverに変更したいのですが、どこを書き換えたらよいかご教示ください。

宜しくお願い致します。

HTML

1<ul class="menu"> 2 <li class="menu__item"> 3 <a class="menu__item__link js-menu__item__link" href="">メニュー1(クリックで開く)</a> 4 <ul class="submenu"> 5 <li class="submenu__item"> 6 <a href="">サブメニュー1</a> 7 </li> 8 <li class="submenu__item"> 9 <a href="">サブメニュー2</a> 10 </li> 11 <li class="submenu__item"> 12 <a href="">サブメニュー3</a> 13 </li> 14 <li class="submenu__item"> 15 <a href="">サブメニュー4</a> 16 </li> 17 </ul> 18 </li> 19 <li class="menu__item"> 20 <a class="menu__item__link js-menu__item__link" href="">メニュー2(クリックで開く)</a> 21 <ul class="submenu"> 22 <li class="submenu__item"> 23 <a href="">サブメニュー1</a> 24 </li> 25 <li class="submenu__item"> 26 <a href="">サブメニュー2</a> 27 </li> 28 <li class="submenu__item"> 29 <a href="">サブメニュー3</a> 30 </li> 31 <li class="submenu__item"> 32 <a href="">サブメニュー4</a> 33 </li> 34 </ul> 35 </li> 36 <li class="menu__item"> 37 <a class="menu__item__link js-menu__item__link" href="">メニュー3(クリックで開く)</a> 38 <ul class="submenu"> 39 <li class="submenu__item"> 40 <a href="">サブメニュー1</a> 41 </li> 42 <li class="submenu__item"> 43 <a href="">サブメニュー2</a> 44 </li> 45 <li class="submenu__item"> 46 <a href="">サブメニュー3</a> 47 </li> 48 <li class="submenu__item"> 49 <a href="">サブメニュー4</a> 50 </li> 51 </ul> 52 </li> 53 <li class="menu__item"> 54 <a class="menu__item__link js-menu__item__link" href="">メニュー4(クリックで開く)</a> 55 <ul class="submenu"> 56 <li class="submenu__item"> 57 <a href="">サブメニュー1</a> 58 </li> 59 <li class="submenu__item"> 60 <a href="">サブメニュー2</a> 61 </li> 62 <li class="submenu__item"> 63 <a href="">サブメニュー3</a> 64 </li> 65 <li class="submenu__item"> 66 <a href="">サブメニュー4</a> 67 </li> 68 </ul> 69 </li> 70</ul>

CSS

1.menu{ 2 display: flex; 3 justify-content:center; 4} 5.menu__item { 6 background: #ccc; 7 color: #000; 8 cursor: pointer; 9 display: block; 10 margin-bottom: 1px; 11 position: relative; 12 list-style: none; 13} 14.menu__item a{ 15 color: #222; 16 text-decoration: none; 17} 18.menu__item__link { 19 color: #fff; 20 display: block; 21 padding: 1rem; 22} 23.submenu { 24 background: #fff; 25 display: none; 26} 27.submenu__item { 28 border-bottom: 1px solid #5200b7; 29 color: #222; 30 padding: 1rem; 31 list-style: none; 32}

css

1@media(max-width:780px 2.menu{ 3 display: block; 4} 5.menu_item { 6 background: #5200b7; 7 color: #fff; 8 cursor: pointer; 9 display: block; 10 margin-bottom: 1px; 11 position: relative; 12} 13.menu_item 14.menu_item__link { 15 color: #fff; 16 display: block; 17 padding: 1rem; 18} 19 20.submenu { 21 background: #fff; 22 display: none; 23} 24.submenu_item { 25 border-bottom: 1px solid #5200b7; 26 color: #222; 27 padding: 1rem; 28}

https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js

js

1$(function(){ 2 $('.js-menu__item__link').each(function(){ 3 $(this).on('click',function(){ 4 $("+.submenu",this).slideToggle(); 5 return false; 6 }); 7 }); 8}); 9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mai1210

2021/02/16 08:54

(1)のこの部分について、どういう状態が理想なのか、キャプチャ等で詳細ご説明いただくことはできますか? 「メニュー1をクリックすると、サブメニューはでてくるのですが、他のメニューも動いてしまいます。(サブメニュー自体は出てきませんが、背景が伸びてきます)メニュー1ならメニュー1のサブメニューだけ動いてほしいです。」 (2)については、js内の「click」を「mouseenter」に置き換えればそれっぽい動きにはなりますが、「閉じたい時にどうすれば良いか」「複数のメニューを同時に開ける状態にするかどうか」「スマホの場合は?」など、設計を考えることが必要になってくると思います。 また、cssのメディアクエリの記述が誤っているようなので、確認してください。
yuko2430

2021/02/17 00:57

js内の「click」を「mouseenter」に置き換えたところ、hoverした時にメニューボックスが開きました。 mail1210様がおっしゃるように、次の問題が出てきますね。 ①マウスがメニューから外れた時にメニューボックスが閉じるようにしたいです。 ②モバイルの時はタップしたらメニューボックスが開く、もう一度タップしたら閉じるという形にしたいです。 知識もないため調べてもよくわかりませんでした。 ご教示いただけますでしょうか。
yuko2430

2021/02/17 01:12

調べてたら以下の記述で上記①の問題が解決しました。 $(function() { $('.menu__item').hover(function() { $(".submenu:not(:animated)", this).slideDown(); }, function() { $(".submenu", this).slideUp(); }); }); ②のレスポンシブ時はちょっと難しいですね・・・
guest

回答1

0

.menu__itemに色をつけてるからです。.menu__itemのbackgroundを削除し

CSS

1.menu__item > a{ 2 background: #ccc; 3}

としてください

javascript

1$(function(){ 2 $(".submenu").hide(); 3 $('.js-menu__item__link').on('click',function(e){ 4 e.preventDefault(); 5 $("+.submenu",this).slideToggle(); 6 }); 7});

投稿2021/02/16 08:53

yambejp

総合スコア115010

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuko2430

2021/02/16 14:17

backgroundの指定が原因だったのですね。修正したら直りました。ありがとうございます。 JSですが、mai1210さんが提示していただいたように「click」を「mouseenter」に置き換えればhoverした時に開きますが、マウスをメニューからはなしたらサブメニューが閉じるようにしたいです。 ご教示いただけますと幸いです。宜しくお願い致します。
yambejp

2021/02/17 01:02

例えば適当なmax-heightを設定してcssでアニメーションをするとか .submenu { max-height:0px; transition:max-height 0.2s; background: #fff; } .menu__item:hover > .submenu{ max-height:300px; transition:max-height 0.5s; }
yuko2430

2021/02/17 01:14

調べてたら以下の記述で上記問題が解決しました。 $(function() { $('.menu__item').hover(function() { $(".submenu:not(:animated)", this).slideDown(); }, function() { $(".submenu", this).slideUp(); }); }); しかし、モバイル版で、クリックするたびにメニューボックスが開く、閉じるとしたいのですが、ご教示いただけますでしょうか。
yambejp

2021/02/17 01:17

PCではhover、モバイルではクリックということですか? windowの幅をみてハックすると良いと思いますが
yuko2430

2021/02/17 01:48

仰る通り、PCではhover、モバイルではクリックで実装したいです。 JSで「780px以下に対し」という記述がわかりません。無知ですみません・・・
yambejp

2021/02/17 01:59 編集

流れ的にはこう <style> #hoge{ background-Color:yellow; } #hoge.clicked{ background-Color:lime; } </style> <script> $(function(){ $('#hoge').on('click',function(){ if($(window).width()>780){ $(this).toggleClass('clicked'); } }).on('mouseover mouseout',function(){ if($(window).width()<=780){ $(this).toggleClass('clicked'); } }); }); </script> <div id="hoge" style="">hoge</div>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問