前提・実現したいこと
TOPへを押したときにliが残らないようにしたい。
かつ、liの文字が二重にならないようにしたい。
###詳細
WordPressを使用し、ポートフォリオサイトを製作中です。
header.phpのハンバーガーを利用したドロワーメニューにてTopへを押す、もしくはスクロールしてTopへ戻るとフェードアウトが表示されてしまう問題が起きています。
作成ベースとしては動くWebデザインアイディア帳の
「グローバルナビゲーション -クリックしたら円形背景が拡大(右上から)-」
https://coco-factory.jp/ugokuweb/move01/5-1-20/
をベースとしています。
試したこと
①まず最初に、実機・検証ともに、一定数のスクロールをするとliの文字が二重になっておりました。
これはPC用navで採用している「一定数スクロールするとnavを表示する」がSP用navにも効いてしまっていることが原因だと思われます。
これを解除するのに、PCとSPでnavを別々にネストすることにしました。
②navを別々にネストすることで文字が二重になることは改善されましたが、ハンバーガーボタンをタップし、表示されるドロワーメニューのTOPへ戻るボタンをタップすると、左上にliフェードアウトで表示されるようになってしまいました。
こちらはファーストビューでnavを表示させない(「一定数スクロールするとnavが表示される」の反対に「TOPではnavが消える」)が効いているものと思われます。
ただ、どちらもPC用navはdisplay:none;をかけていますし、検証してもフェードアウトしてしまうので、どれが悪さをしているのかわかりませんでした…
IDのgnavをclassに変えるとハンバーガーが動作しなくなってしまうため、該当箇所のtransition等変更してみましたが、改善できなかったため質問させていただきます。
該当のソースコード
HTML
1<nav id="gnav"> 2 <ul class="gnav_sp"> 3 <li class="li"><a href="#design">Design</a></li> 4 <li class="li"><a href="#skill">Skill</a></li> 5 <li class="li"><a href="#profile">Profile</a></li> 6 <li class="li"><a href="#contact">Contact</a></li> 7 <li class="li"><a href="#">Top</a></li> 8 </ul> 9 <div class="openbtn"></div> 10 <div class="circle-bg"></div> 11 <div class="gnav_pc"> 12 <ul> 13 <li><a href="#design">Design</a></li> 14 <li><a href="#skill">Skill</a></li> 15 <li><a href="#profile">Profile</a></li> 16 <li><a href="#contact">Contact</a></li> 17 <li><a href="#">Top</a></li> 18 </ul> 19 </div> 20</nav> 21
css
1#gnav ul { 2 opacity: 0; /*はじめは透過0*/ 3 /*ナビゲーション天地中央揃え*/ 4 position: absolute; 5 top: 50%; 6 left: 50%; 7 transform: translate(-50%, -50%); 8 z-index: -3 9 } 10 /*背景が出現後にナビゲーションを表示*/ 11 #gnav.panelactive ul { 12 opacity: 0.9; 13 z-index: 1000; 14 } 15 /* 背景が出現後にナビゲーション li を表示*/ 16 #gnav.panelactive ul li { 17 animation-name: gnaviAnime; 18 animation-duration: 1s; 19 animation-delay: .1s; /*0.2 秒遅らせて出現*/ 20 animation-fill-mode: forwards; 21 opacity: 0; 22 } 23 @keyframes gnaviAnime { 24 0% { 25 opacity: 0; 26 } 27 100% { 28 opacity: 1; 29 } 30 } 31 /*丸の拡大*/ 32 .circle-bg { 33 position: fixed; 34 z-index: 3; 35 /*丸の形*/ 36 width: 100px; 37 height: 100px; 38 border-radius: 50%; 39 background: #FFDDEE; 40 /*丸のスタート位置と形状*/ 41 transform: scale(0); /*scaleをはじめは0に*/ 42 right: 20px; 43 top: 20px; 44 transition: all .5s; /*0.6秒かけてアニメーション*/ 45 } 46 .circle-bg.circleactive { 47 transform: scale(50); /*クラスが付与されたらscaleを拡大*/ 48 } 49 /*アクティブになったエリア*/ 50 #gnav.panelactive { 51 /*position:fixed;にし、z-indexの数値を大きくして前面へ*/ 52 position: fixed; 53 z-index: 999; 54 top: 0; 55 width: 100%; 56 height: 100vh; 57 } 58 /*リストのレイアウト設定*/ 59 #gnav li { 60 text-align: center; 61 list-style: none; 62 width: 100vw; 63 } 64 #gnav ul li a { 65 color: #333; 66 padding: 15px; 67 display: block; 68 font-family: tbcinergothic-std, sans-serif; 69 letter-spacing: 0.1em; 70 font-weight: bold; 71 position: relative; 72 bottom: 30px; 73 } 74 #gnav ul li a:hover { 75 background: rgba(255, 255, 255, 0.8); 76 transition: 0.5s; 77 } 78}
jQuery
1/*ナビゲーション途中から*/ 2$(function () { 3 var topBtn = $('.gnav_pc'); 4 topBtn.hide(); 5 //スクロールがに達したらボタン表示 6 $(window).scroll(function () { 7 if ($(this).scrollTop() > 450) { 8 topBtn.fadeIn(); 9 } else { 10 topBtn.fadeOut(); 11 } 12 }); 13}); 14 15ハンバーガー 16 17<script> 18jQuery(".openbtn").click(function () { //ボタンがクリックされたら 19jQuery(this).toggleClass('active'); //ボタン自身に activeクラスを付与し 20 jQuery("#gnav").toggleClass('panelactive'); //ナビゲーションにpanelactiveクラスを付与 21 jQuery(".circle-bg").toggleClass('circleactive'); //丸背景にcircleactiveクラスを付与 22}); 23 24jQuery("#gnav a").click(function () { //ナビゲーションのリンクがクリックされたら 25 jQuery(".openbtn").removeClass('active'); //ボタンの activeクラスを除去し 26 jQuery("#gnav").removeClass('panelactive'); //ナビゲーションのpanelactiveクラスを除去 27 jQuery(".circle-bg").removeClass('circleactive'); //丸背景のcircleactiveクラスを除去 28});</script>
補足情報(FW/ツールのバージョンなど)
DWを使用、WordPressは5.8.1。
スクロールで表示するjQueryはcommons.phpで記述していますが、ハンバーガーは動作しなかったためhome.phpに記述しています。
また、別リンクでのモーダルのcssとの兼ね合いでfunctionsではなくphpでcssを読み込ませています。
初心者のためわかりやすくお伝えできればと思いましたが、足りない情報等あればお答えしますのでよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー