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

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

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

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

HTML

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

CSS

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

Q&A

解決済

1回答

416閲覧

ハンバーガーメニューからリンクを選択しても自動で

Rabitttt

総合スコア17

JavaScript

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/10/23 12:36

編集2021/10/23 22:45

■実現したいこと
HTML、CSS、JavaScriptを使用してポートフォリオを作成しています。
ハンバーガーメニューを実装したのですがうまく動きません。

■要件
ハンバーガーメニューを作成。Gitにファイルをアップし自分の携帯端末iphone8で
ハンバーガーメニューを開き、リンクを選択した後メニューが消えません。

ただし、
PCのデベロッパーツールを使用してiphone6/7/8の設定に変更。
ハンバーガーメニューからメニューを開きリンクを選択した後、メニューが消える。

リンク選択後メニューを消したいのですが、何か考えられることはありますでしょうか?

HTML

1 <header id="header"> 2 <div class="container"> 3 <img src="img/bussines02.jpg"> 4 <!-- スマホ版ハンバーガーメニュー --> 5 <div class="sp-menu"> 6 <span class="material-icons" style="color:white; background-color: gray;" id="open">menu</span> 7 </div> 8 9 <!-- ハンバーガーメニュー押下時のメニュー --> 10 <div class="overlay"> 11 <span class="material-icons" style="color:white; background-color: gray;" id="close">close</span> 12 <nav> 13 <ul > 14 <li ><a href="#header" onclick="myFunction()">Top</a></li> 15 <li><a href="#profile" onclick="myFunction()">Profile</a></li> 16 <li onclick="myFunction()"><a href="#skillset">Skillset</a></li> 17 <li onclick="myFunction()"><a href="#works">Works</a></li> 18 <li onclick="myFunction()"><a href="#contact">Contact</a></li> 19 </ul> 20 </nav> 21 </div> 22 </div> 23 </header>

JavaScript

1{ 2 // 開くのID取得 3 const open = document.getElementById('open'); 4 const overlay = document.querySelector('.overlay'); 5 // 閉じるのID取得 6 const close = document.getElementById(`close`); 7 8 // メニューをクリックした場合 9 open.addEventListener('click', () => { 10 // メニュー画面を開く 11 overlay.classList.add('show'); 12 // ハンバーガー三本を消す 13 open.classList.add('hide'); 14 }); 15 16 17 // 閉じる押下時 18 close.addEventListener('click', () => { 19 overlay.classList.remove('show'); 20 // ハンバーガー三本を消す 21 open.classList.remove('hide'); 22 }); 23 24 25 // メニューを選択した場合、閉じる押下と同じ処理を実行 26 function myFunction() { 27 overlay.classList.remove('show'); 28 // ハンバーガー三本を消す 29 open.classList.remove('hide'); 30 } 31 32 } 33 34コード

css

1@charset "utf-8"; 2 3/* -------------------------------------- */ 4/* common 全体共通 */ 5/* -------------------------------------- */ 6body{ 7 width: auto; 8 margin:0; 9 background-color:whitesmoke; 10 padding: 0; 11} 12img{ 13 vertical-align:bottom; 14} 15h1,h2,h3,p{ 16 margin: 0; 17 padding: 0; 18 font-weight: normal; 19 /* font-family: 'Osaka',sans-serif; */ 20} 21h1{ 22 font-weight: bold; 23 font-size: 64px; 24 font-family: 'Caveat', cursive; 25} 26h3{ 27 font-weight: bold; 28 font-size: 56px; 29 font-family: 'Caveat', cursive; 30 color:gray; 31} 32li{ 33 list-style: none; 34} 35/* -------------------------------------- */ 36/* header */ 37/* -------------------------------------- */ 38/* header */ 39header .Prof{ 40 color:gray; 41} 42header{ 43 background-color:whitesmoke; 44 /* background-color: darkcyan; */ 45 46} 47/* ヘッダ画像 */ 48header .container img{ 49 background-size:cover; 50 width: 100%; 51 height: auto; 52} 53header .container p{ 54 display: inline-block; 55 width: 500px; 56 color: black; 57} 58header h1{ 59 /* 下記は写真いっぱいのサイズになる */ 60 padding-top: 300px; 61 color: black; 62} 63 64/* -------------------------------------- */ 65/* main(About) */ 66/* -------------------------------------- */ 67main .container{ 68 width: 1000px; 69 margin: 0 auto; 70 text-align: center; 71} 72main .container .page01{ 73 /* width: 800px; */ 74 justify-content: space-between; 75 padding: 32px 0px; 76 display: flex; 77 align-items: center; 78} 79 80main .image{ 81 display: block; 82 margin: 0 auto; 83} 84main .Profile{ 85 text-align: left; 86 font-size: 20px; 87 padding-left: 64px; 88} 89main h1{ 90 text-align: center; 91 padding: 60px 0px; 92} 93main h3{ 94 padding-top:60px; 95 padding-bottom: 20px; 96} 97 98/* ----------------------------------------------- */ 99/* ページトップへ */ 100/* ----------------------------------------------- */ 101#page_top{ 102 width: 50px; 103 height: 50px; 104 position: fixed; 105 right: 0; 106 bottom: 0; 107 background:gray; 108 /* opacity: 0.6; */ 109 border-radius: 5px; 110} 111#page_top a{ 112 position: relative; 113 display: block; 114 width: 50px; 115 height: 50px; 116 text-decoration: none; 117} 118#page_top a::before{ 119 font-family: 'Font Awesome 5 Free'; 120 font-weight: 900; 121 content: '\f106'; 122 font-size: 25px; 123 color: #fff; 124 position: absolute; 125 width: 25px; 126 height: 25px; 127 top: 0; 128 bottom: 0; 129 right: 0; 130 left: 0; 131 margin: auto; 132 text-align: center; 133} 134 135/* ----------------------------------------------- */ 136/* ハンバーガーメニュー処理 */ 137/* ----------------------------------------------- */ 138/* ハンバーガーメニュー アイコン */ 139header .sp-menu { 140 margin: 0; 141 /* margin-left: auto; */ 142 text-align: center; 143} 144 145.sp-menu #open { 146 position: absolute; 147 top: 0px; 148 right: 0px; 149 font-size: 32px; 150 line-height: 50px; 151 margin-left: auto; 152 margin-right: auto; 153 cursor: pointer; 154 width: 50px; 155 height: 50px; 156 border-radius: 5px; 157 /* カーソル移動時固定する */ 158 position: fixed; 159} 160 161/* // ハンバーガー三本を消す 162open.classList.add('hide'); */ 163.sp-menu #open.hide{ 164 display: none; 165} 166 167/*Menuの表示 */ 168 .overlay { 169 font-size: 32px; 170 color:black; 171 position: fixed; 172 top: 0; 173 bottom: 0; 174 right: 0; 175 left: 0; 176 background: rgba(255, 255, 255, 0.95); 177 text-align: center; 178 padding: 64px; 179 opacity: 0; 180 pointer-events: none; 181 /* transition:opacity 0.6s; */ 182 /* ふわっと表示させる */ 183 transition: opacity .6s; 184 } 185 186 /* // メニュー画面を開く 187 overlay.classList.add('show'); */ 188 .overlay.show { 189 opacity: 1; 190 /* マウスを */ 191 pointer-events: auto; 192 /* background-color:grey; */ 193 } 194 195 /* 「×」を右上に */ 196 .overlay #close { 197 position: absolute; 198 top: 0px; 199 right: 0px; 200 font-size: 32px; 201 line-height: 50px; 202 cursor: pointer; 203 width: 50px; 204 height: 50px; 205 border-radius: 5px; 206 /* カーソル移動時固定する */ 207 position: fixed; 208 } 209 210/* LISTの●を非表示 */ 211.overlay ul { 212 list-style-type: none; 213 margin: 0; 214 padding: 0; 215} 216 217/* */ 218.overlay li { 219 margin-top: 24px; 220 /* 下からふわっと */ 221 opacity: 0; 222 transform: translateY(16px); 223 transition: opacity 0.3s, transform .3s; 224} 225 226/* 下からふわっと */ 227/* overlayがshowの場合 */ 228.overlay.show li { 229 /* menuを表示 */ 230 opacity: 1; 231 transform: none; 232} 233 234/* Menu1⇒ Menu2⇒ Menu3 の順に表示*/ 235.overlay.show li:nth-child(1) { 236 transition-delay: .1s; 237} 238 239.overlay.show li:nth-child(2) { 240 transition-delay: .2s; 241} 242 243.overlay.show li:nth-child(3) { 244 transition-delay: .3s; 245} 246.overlay.show li:nth-child(4) { 247 transition-delay: .4s; 248} 249.overlay.show li:nth-child(5) { 250 transition-delay: .5s; 251} 252 253@media(min-width: 100px) and (max-width: 800px){ 254 h3{ 255 font-size: 40px; 256 } 257/* ----------------------------------------------- */ 258/* Top */ 259/* ----------------------------------------------- */ 260 header .container p{ 261 width: 300px; 262 } 263 header .container{ 264 background-position:30% 40%; 265 } 266 /* 「Portforio」フォント */ 267 header h1{ 268 padding-top: 140px; 269 } 270/* ----------------------------------------------- */ 271/* About */ 272/* ----------------------------------------------- */ 273 274main .container{ 275 width: auto; 276 margin: 0 277 } 278 main .container .page01{ 279 display:block; 280 margin: 0px auto; 281 padding: 0px 0px; 282 width: 95%; 283 /* background-color: burlywood; */ 284 } 285 main .image{ 286 display: block; 287 margin: 0; 288 } 289 main .Profile{ 290 text-align: left; 291 font-size: 20px; 292 padding-top: 16px; 293 padding-left: 16px; 294 } 295 main h1{ 296 margin:0px; 297 padding: 0px; 298 } 299 main h3{ 300 margin:0px; 301 } 302/* ----------------------------------------------- */ 303/* スキルBOX */ 304/* ----------------------------------------------- */ 305 main .page02 .slkillpanel{ 306 /* スキルBOXを縦並びにします */ 307 display: block; 308 /* margin: 0 auto; */ 309 } 310 main .page02 .skillbox{ 311 margin: 20px auto; 312 padding: 10px 0px; 313 box-sizing: border-box; 314 } 315 /* フロントエンド、DB、その他 */ 316 main .page02 span{ 317 font-size: 16px; 318 } 319 320/* -------------------------------------- */ 321/* 【WORK】 */ 322/* -------------------------------------- */ 323.page03 .copylp{ 324 display: block; 325 /* float: left; */ 326 /* background-color: brown; */ 327 328 /* margin-bottom: 8px; */ 329 } 330 .page03 img{ 331 margin-bottom: 16px; 332 } 333 334 .page03 .workpanel{ 335 font-size: 12px; 336 /* height: 650px; 337 */ 338 height: auto; 339 margin-bottom: 30px; 340 } 341}

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

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

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

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

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

175

2021/10/23 20:01

CSSも記載してください。
Rabitttt

2021/10/23 22:45

ありがとうございます。 追加しました。
guest

回答1

0

ベストアンサー

まず、現象が発生するのはiphoneというかsafariですよね。
私のmacのsafariでも再現しました。
以下、手探りで修正ポイント見つけ出しました。
・id'open'を'open2'等に変更
→この変更を行わないと、リンクをクリックした後にopenが消えてしまう
→エディタでopenだけ別の色がついていたので気になって調べてみたらwindowsでの予約後だったため、一応変更してみたら動くようになりました

・class="overlay"の要素にid="overlay"を付与する
→これでリンククリックによりメニューが閉じるようになります
→なぜこれで治るのか本当に謎
→idが"overlay"の場合しか動きません
→id付与でclassを消した場合も動きません
→getElementsByClassName("overlay")[0]で取得した場合も全く同様の挙動

どなたか理由説明できる方補足お願いします。

投稿2021/10/23 23:33

175

総合スコア147

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

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

Rabitttt

2021/10/24 03:43

回答ありがとうございます。 はい、safariです。 ・id'open'を'open2'等に変更 ・class="overlay"の要素にid="overlay"を付与する 上記対応でメニューは消えるようになりましたが、その後「ハンバーガー」ボタンが表示されません。 PCのデベロッパーツールではメニューが消えた後でも「ハンバーガー」ボタンは表示します。。
175

2021/10/24 05:37

多分「id'open'を'open2'等に変更」が何か修正漏れてるような気がします 一括置換で変更しましたか? >PCのデベロッパーツール ブラウザについて情報を記載する際はブラウザ名も説明してください。 PCの何のブラウザの話ですか
Rabitttt

2021/10/24 05:59

>一括置換で変更しましたか? はい、一括で変えました。 >ブラウザについて情報を記載する際はブラウザ名も説明してください。 >PCの何のブラウザの話ですか PCのツールはgooglechromeです。これだと正常。 id="overlay"を付与した場合css変更箇所は必要ですか? .overlay.show ⇒#overlay.show にする必要あり?
175

2021/10/24 06:15

class="overlay"も残っているので指定方法の変更は不要です また影響しているのはoverlayの方ではなくopen2の要素です 現状のソースコードを記載してください
Rabitttt

2021/10/24 07:18

■HTML <header id="header"> <div class="container"> <img src="img/bussines02.jpg"> <!-- スマホ版ハンバーガーメニュー --> <div class="sp-menu"> <span class="material-icons" style="color:white; background-color: gray;" id="open2">menu</span> </div> <!-- ハンバーガーメニュー押下時のメニュー --> <div class="overlay" id="overlay"> <span class="material-icons" style="color:white; background-color: gray;" id="close">close</span> <nav> <ul > <li ><a href="#header" onclick="myFunction()">Top</a></li> <li><a href="#profile" onclick="myFunction()">Profile</a></li> <li onclick="myFunction()"><a href="#skillset">Skillset</a></li> <li onclick="myFunction()"><a href="#works">Works</a></li> <li onclick="myFunction()"><a href="#contact">Contact</a></li> </ul> </nav> </div> </div> </header> ■CSS /* ----------------------------------------------- */ /* ハンバーガーメニュー処理 */ /* ----------------------------------------------- */ /* ハンバーガーメニュー アイコン */ header .sp-menu { margin: 0; /* margin-left: auto; */ text-align: center; } /* ????のスタイリング */ .sp-menu #open2 { position: absolute; top: 0px; right: 0px; font-size: 32px; line-height: 50px; margin-left: auto; margin-right: auto; cursor: pointer; width: 50px; height: 50px; border-radius: 5px; /* カーソル移動時固定する */ position: fixed; } /* // ハンバーガー三本を消す /* ????のスタイリング 非表示*/ .sp-menu #open2.hide{ display: none; } /*Menuのスタイリング */ .overlay { font-size: 32px; color:black; position: fixed; top: 0; bottom: 0; right: 0; left: 0; background: rgba(255, 255, 255, 0.95); text-align: center; padding: 64px; opacity: 0; pointer-events: none; /* transition:opacity 0.6s; */ /* ふわっと表示させる */ transition: opacity .6s; } /* メニュー画面を開く */ .overlay.show { opacity: 1; /* マウスを */ pointer-events: auto; /* background-color:grey; */ } /* 「×」を右上に */ .overlay #close { position: absolute; top: 0px; right: 0px; font-size: 32px; line-height: 50px; cursor: pointer; width: 50px; height: 50px; border-radius: 5px; /* カーソル移動時固定する */ position: fixed; } /* LISTの●を非表示 */ .overlay ul { list-style-type: none; margin: 0; padding: 0; } /* */ .overlay li { margin-top: 24px; /* 下からふわっと */ opacity: 0; transform: translateY(16px); transition: opacity 0.3s, transform .3s; } /* 下からふわっと */ /* overlayがshowの場合 */ .overlay.show li { /* menuを表示 */ opacity: 1; transform: none; } /* Menu1⇒ Menu2⇒ Menu3 の順に表示*/ .overlay.show li:nth-child(1) { transition-delay: .1s; } .overlay.show li:nth-child(2) { transition-delay: .2s; } .overlay.show li:nth-child(3) { transition-delay: .3s; } .overlay.show li:nth-child(4) { transition-delay: .4s; } .overlay.show li:nth-child(5) { transition-delay: .5s; } ■Js // 開くのID取得 const open = document.getElementById('open2'); const overlay = document.querySelector('.overlay'); // 閉じるのID取得 const close = document.getElementById(`close`); // メニューをクリックした場合 open.addEventListener('click', () => { // メニュー画面を開く overlay.classList.add('show'); // ハンバーガー三本を消す open.classList.add('hide'); }); // 閉じる押下時 close.addEventListener('click', () => { overlay.classList.remove('show'); // ハンバーガー三本を消す open.classList.remove('hide'); }); // メニューを選択した場合、閉じる押下と同じ処理を実行 function myFunction() { overlay.classList.remove('show'); // ハンバーガー三本を消す open.classList.remove('hide'); }
175

2021/10/24 07:32

ん〜、mac版safariではそのソースコードで意図通り動くこと確認しました リンククリックでメニューを閉じた後ボタンが消えてしまうのはiOS版safariでのみ発生しているようですね
175

2021/10/24 07:43 編集

一応const openもopen2に変更してみてください (もともとこの変数名が予約語と重複する可能性があるため、一括置換してもらう意図で変更をお願いしました)
Rabitttt

2021/10/24 07:43

なるほどです。。 一応携帯でsafari,chromeで動かしたのですが 同現象が発生してしまいます。
Rabitttt

2021/10/24 07:48

>一応const openもopen2に変更してみてください 変更してみましたが改善しませんでした。(´;ω;`)ウッ…
Rabitttt

2021/10/24 07:55

>一応const openもopen2に変更してみてください すみません。上記対応で改善しました。(^^♪ うまく更新されてなかっただけでした。 ありがとうございました。
175

2021/10/24 08:03 編集

解決してよかったです ただしなぜこれで直るのかはマジで謎なので分かる方おられたら補足ほしいです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問