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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

1895閲覧

JavaScriptを使ったレスポンシブ対応メニュー

workr

総合スコア158

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/05/22 03:14

HTMLページで、レスポンシブに対応したナビメニューを作ろうとしています。
デスクトップサイズではマウスホバーによるメニュー開閉、スマートフォンサイズでは開閉のためのボタンが現れ、それを押すことでメニューを表示する予定です。

そのまま作るとスマートフォンサイズのときにメニューを閉じた後、デスクトップサイズまで画面を広げるとメニューは消えたままなので操作できなくなってしまいます。
逆にデスクトップでホバーアウトでメニューを閉じるとスマートフォンサイズではメニューが閉じたままになります。

メディアクエリで !important を使うと開閉ができなくなってしまうので、ウィンドウのリサイズイベントをJavascript で拾ってブレークポイントで表示/非表示を切り替えるなどあるかと思いますが、こういったケースではどのようにするのが一般的なのでしょうか?

HTML

1<!DOCTYPE html> 2<html> 3 4<head> 5 <meta charset="utf-8"> 6 <title></title> 7 <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script> 8 <style rel="stylesheet"> 9 #menu { 10 background-color: aliceblue; 11 display: block; 12 position: relative; 13 height: 30px; 14 line-height: 30px; 15 width:300px; 16 } 17 18 #menu ul { 19 display: block; 20 margin: 0; 21 width: 100%; 22 position: absolute; 23 left: 0; 24 top: 30px; 25 } 26 27 #menu-button { 28 display: inline; 29 } 30 31 @media (min-width: 768px) { 32 #menu ul { 33 display: none; 34 } 35 36 #menu-button { 37 display: none; 38 } 39 } 40 </style> 41</head> 42 43<body> 44 <p><button id="menu-button">Menu</button></p> 45 <div id="menu"> 46 <div>MENU</div> 47 <ul> 48 <li>menu 1</li> 49 <li>menu 2</li> 50 <li>menu 3</li> 51 </ul> 52 </div> 53 <script> 54 $(function () { 55 $('#menu').hover(function(){ 56 if (window.matchMedia('(min-width: 768px)').matches) { 57 $('#menu ul').slideDown('fast'); 58 } 59 }, function(){ 60 if (window.matchMedia('(min-width: 768px)').matches) { 61 $('#menu ul').slideUp('fast'); 62 } 63 }); 64 65 $('#menu-button').on('click', function(){ 66 $('#menu').toggle(); 67 }); 68 }); 69 </script> 70</body> 71</html>

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

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

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

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

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

guest

回答2

0

ベストアンサー

方法としては

  1. resize イベントで trigger() を使い、画面サイズごとにメニューの開閉を操作する。
  2. 表示やアニメーションはCSSで.pc.spなどのクラスで画面サイズごとに実装し、

resize イベントで画面サイズごとにクラスを切り替える。

ぱっと私が思いつくにこの2つでしょうか。

投稿2017/05/22 04:13

rok6

総合スコア241

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

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

0

「マウスホバーによるメニュー開閉」ではなく、デスクトップサイズでもスマートフォンサイズでもonclickでメニュー開閉してはどうでしょうか。
わざわざボタンを用意するのではなく、「MENU」にonclickイベントを付与して。
※マウスホバーにしなければならない理由があったらすみません

投稿2017/05/22 22:39

m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問