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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

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

Q&A

解決済

1回答

791閲覧

ドロワーメニューのTopへを押すとリストのフェードアウトが表示されて困っています。

chinya_pink

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

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

0グッド

0クリップ

投稿2021/09/25 07:13

編集2021/09/25 07:54

前提・実現したいこと

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を読み込ませています。

初心者のためわかりやすくお伝えできればと思いましたが、足りない情報等あればお答えしますのでよろしくお願いいたします。

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

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

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

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

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

k4a

2021/09/25 13:49

> ハンバーガーボタンをタップし、表示されるドロワーメニューのTOPへ戻るボタンをタップすると、左上にliフェードアウトで表示されるようになってしまいました。 上記現象が再現(理解)できませんでした。 jsfiddle(https://jsfiddle.net/)等を用いて現象を再現できる環境を共有していただけると、他の方の回答につながるかと思います。 また、スマホ用PC用の要素を用意すること自体はよくあることですが、両方とも同時に表示をさせておくのはあまり得策ではありません。ユーザーエージェント等でアクセス環境を判断するのが良いかと思います。
chinya_pink

2021/09/25 22:58

コメントありがとうございます。 使ってみたのですが、WordPressで悪さをしているのか、他のコードが干渉しているのかは分かりませんが、こちらでは確認できませんでした。 (https://jsfiddle.net/ndL0y9h1/18/) ユーザーエージェントについては調べて理解ができたのですが、URLを別途用意した方がいいということでしょうか?
k4a

2021/09/26 03:05

お力にはなれませんでしたが解決したようで何よりです。 ユーザーエージェントですが、URLを別途用意というわけではありません。該当ページにアクセスしたのがPCならPC用のnavを、スマホ(+タブレットも?)ならスマホ用のnavをページ内に表示するようにするということです。 なぜPC用とスマホ用のnavを分けているのかわかりませんが、今回のコードだとnavの構造自体に違いはあまり無い様に見えますので、ユーザーエージェントに応じてjsからクラスを付与するのが良いように思えます。 とはいえ現状で意図通り動いているのであれば特に変更する必要もありません。 また今回の例だと、ユーザーエージェントではなくメディアクエリなどで単純にスクリーンの幅に応じてCSSを切り替える方が適しているかもしれません。
chinya_pink

2021/09/26 03:41

とんでもないです!ありがとうございました! 今回<nav>の中にclassで別表示で両方ネストすると文字が二重になる謎の現象が起きていたために別でネストをしていました。 jsにメディアクエリをかける、という感覚でいいのでしょうか? そういった発想はなかったのでもしまたjs絡みで変な挙動が起きたら試してみようと思います! また質問することもあると思うので、また目に止まったらよろしくお願いいたします。 ありがとうございました!
guest

回答1

0

自己解決

.gnav_pc {
display:none;
}
ではなく、
visibility: hidden;にしたら解決いたしました…
(ちなみにbackground-color: transparent;ではダメでした)

閲覧していただいた方、質問していただいた方ありがとうございました。

投稿2021/09/25 23:11

chinya_pink

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問