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

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

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

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

HTML

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

CSS

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

Q&A

1回答

1396閲覧

JavaScriptを用いてハンバーガーメニューを作る際に、タブレット版とスマホ版でアニメーションを変えたい

kakedashi009

総合スコア5

JavaScript

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

HTML

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

CSS

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

0グッド

1クリップ

投稿2020/07/27 04:11

題名にもある通りハンバーガーメニューを作ろうと思っており、現在JavaScriptを用いて処理を記述しています。
しかし、自分の考えるものと異なる挙動をしており、考えても何が原因なのかわからない状態でいます。

自分が実現したいことは、
・タブレット版ではハンバーガーメニューが上からスライドイン
・スマホ版ではハンバーガーメニューが右からスライドイン
をアニメーション付きで実現したいのですが、
実際のところは
・タブレット版では正常に機能するが、スマホ版では右からのスライドインは行われず、何も動作しないが、タブレット版からリサイズした際にすでに動作したメニューの出現がスマホ版のサイズで出てくる
という風になっています。

これは何が原因なのでしょうか。
また、上記を実現するためにJavaScriptにてレスポンシブに対応した処理を条件分岐で記述する方法があると思いますが、この記述で正しいのかご意見いただけると幸いです。

html

1<div class="hamburger-menu" id="hamburger_menu"> 2 <div class="logo"> 3 <span class="logo--left"> 暮らしの体験宿</span> 4 <span class="logo--right">いろは</span><br> 5 <span class="logo--lower">-Yakushima Lodge & food Atelier-</span> 6 </div> 7 <div class="nav__hamburger-btn" id="hamburger_crossbtn"> 8 <div class="hamburger-btn__cross">×</div> 9 </div> 10 <ul class="nav__ul nav__ul--hamburger"> 11 <a href="#" class="nav__ul--ankwer"> 12 <li class="nav__li nav__li--1"> 13 -いろはのこと- 14 </li> 15 </a> 16 <a href="#" class="nav__ul--ankwer"> 17 <li class="nav__li nav__li--2"> 18 -宿泊ロッジ- 19 </li> 20 </a> 21 <a href="#" class="nav__ul--ankwer"> 22 <li class="nav__li nav__li--3"> 23 -食工房/ラウンジ- 24 </li> 25 </a> 26 <a href="#" class="nav__ul--ankwer"> 27 <li class="nav__li nav__li--4"> 28 -体験プログラム- 29 </li> 30 </a> 31 <a href="#" class="nav__ul--ankwer"> 32 <li class="nav__li nav__li--5"> 33 -ご予約- 34 </li> 35 </a> 36 </ul> 37 <a href="#"> 38 <img src="画像/facebook.png" alt="" class="hamburger-menu__facebook"> 39 </a> 40 <a href="#"> 41 <img src="画像/instagram.png" alt="" class="hamburger-menu__instagram"> 42 </a> 43 </div> 44 <div class="background-image"> 45 <img src="画像/logo-white.png" alt="ロゴ" class="background-image__white-logo"> 46 </div> 47 <div class="background-image--mobile"> 48 <a href="#"> 49 <img src="画像/logo-white.png" alt="ロゴ" class="background-image__white-logo"> 50 </a> 51 </div>

css

1これはモバイル版CSSです 2.hamburger-menu{ 3 width: 320px; 4 position: absolute; 5 right: -360px; 6} 7.hamburger-menu--mobile-apearance{ 8 right: 0px; 9 transition: 1s; 10} 11これはタブレット版のCSSです 12.hamburger-menu{ 13 background-color: rgba(0, 0, 0, 0.644); 14 height: 100vh; 15 width: 100vw; 16 padding: 1px; 17 margin: 0px; 18 box-sizing: border-box; 19 display: block; 20 overflow: hidden; 21 position: absolute; 22 z-index: 100; 23 top: -100vh; 24} 25.hamburger-menu--apearance{ 26 top: 0vh; 27 transition: 1s; 28}

JavaScript

1// 宣言 2const btn =document.getElementById('hamburger_btn'); 3const crossbtn =document.getElementById('hamburger_crossbtn'); 4// 処理 5btn.addEventListener('click' , () => { 6 if (window.matchMedia('(min-width: 700px)').matches) { 7 document.getElementById('hamburger_menu').classList.toggle('hamburger-menu--apearance'); 8 } else { 9 document.getElementById('hamburger_menu').classList.toggle('hamburger-menu--mobile-apearance'); 10 }; 11});

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

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

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

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

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

guest

回答1

0

jsの処理を見てみると
700px以下の#hamburger_menuにはhamburger-menu--apearanceを
それ以外の#hamburger_menuにはhamburger-menu--mobile-apearanceを
適応させるとなっています。

また、全体を見ていないのでわかりませんが、cssの優先順位は合っていますか?
メディアクエリにおけるwidthの順番などいかがでしょうか?

投稿2020/07/27 05:47

wing283

総合スコア123

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問