■実現したいこと
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}
回答1件
あなたの回答
tips
プレビュー