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

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

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

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

HTML

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

CSS

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

Q&A

解決済

1回答

3639閲覧

CSS:ハンバーガーメニュー、リンククリックしたら閉じたい

rrgsn

総合スコア9

jQuery

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

HTML

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

CSS

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

0グッド

0クリップ

投稿2020/04/30 04:18

前提・実現したいこと

<実現したいこと>
CSS:ハンバーガーメニュー、リンククリックしたら閉じたい

<前提>
ハンバーガーメニューのリンクをクリックしても、
ページ自体の遷移はしているが、メニュバーは開いたまま

ハンバーガーメニューは、html,cssのみで制作
jQueryでも対応可能

発生している問題・エラーメッセージ

閉じるボタンを押さないとメニューが閉じない

該当のソースコード

HTML

1 <header id="hdr"> 2 <input id="navToggle" type="checkbox" name="toggler"> 3 <label for="navToggle" class="navBtn"><span></span><span></span><span></span></label> 4 5 <div class="gnav"> 6 <nav class="gnavCont"> 7 <ul class="primary-menu"> 8 <li><a href="#section1">Home</a></li> 9 <li><a href="#section2">About</a></li> 10 <li><a href="#section3">Company</a></li> 11 <li><a href="#section4">Contact</a></li> 12 </ul> 13 </div> 14 </div> 15 </header>

CSS

1 2header#hdr { 3 overflow: visible; 4 height: auto; 5 position: fixed; 6 top: 0; 7 left: 0; 8 width: 100%; 9 z-index: 990; 10 margin: 0; 11 pointer-events: none; 12} 13 14header#hdr .navBtn { 15 display: inline-block; 16 transition: all .4s; 17 box-sizing: border-box; 18 position: relative; 19 width: 30px; 20 height: 22px; 21 pointer-events: auto; 22} 23header#hdr .navBtn span { 24 display: inline-block; 25 transition: all .4s; 26 box-sizing: border-box; 27 position: absolute; 28 left: 0; 29 width: 100%; 30 height: 2px; 31 background-color: #333333; 32} 33header#hdr .navBtn span:nth-of-type(1) { 34 top: 0; 35} 36header#hdr .navBtn span:nth-of-type(2) { 37 top: 10px; 38} 39header#hdr .navBtn span:nth-of-type(3) { 40 bottom: 0; 41} 42header#hdr #navToggle:checked ~ .navBtn span:nth-of-type(1) { 43 -webkit-transform: translateY(10px) rotate(-45deg); 44 transform: translateY(10px) rotate(-45deg); 45} 46header#hdr #navToggle:checked ~ .navBtn span:nth-of-type(2) { 47 opacity: 0; 48} 49header#hdr #navToggle:checked ~ .navBtn span:nth-of-type(3) { 50 -webkit-transform: translateY(-10px) rotate(45deg); 51 transform: translateY(-10px) rotate(45deg); 52} 53 54header#hdr .gnav { 55 display: none; 56 background: rgba(0,0,0,0.8); 57 position: fixed; 58 top: 0; 59 left: 0; 60 width: 100%; 61 height: 100%; 62 z-index: 0; 63 justify-content: center; 64 align-items: center; 65 pointer-events: auto; 66} 67@media (max-width: 767px) { 68 header#hdr .gnav { 69 background: rgba(0,0,0,0.8); 70 } 71 72} 73header#hdr #navToggle:checked ~ .headerCont .lCont .hLogo .hLogoG { 74 display: block; 75} 76header#hdr #navToggle:checked ~ .headerCont .lCont .hLogo .hLogoB { 77 display: none; 78} 79header#hdr #navToggle:checked ~ .navBtn span { 80 background-color: #fff; 81} 82@media (max-width: 767px) { 83 header#hdr #navToggle:checked ~ .headerCont .rCont .hNav { 84 position: fixed; 85 bottom: 4%; 86 left: 0%; 87 } 88} 89header#hdr #navToggle:checked ~ .headerCont .rCont .hNav .nav01 { 90 display: none; 91} 92header#hdr #navToggle:checked ~ .headerCont .rCont .hNav .nav02 { 93 display: -webkit-box; 94 display: -moz-box; 95 display: -ms-flexbox; 96 display: -webkit-flex; 97 display: -moz-flex; 98 display: flex; 99} 100header#hdr #navToggle:checked ~ .gnav { 101 display: -webkit-box; 102 display: -moz-box; 103 display: -ms-flexbox; 104 display: -webkit-flex; 105 display: -moz-flex; 106 display: flex; 107} 108header#hdr #navToggle:checked ~ .gnav .gnavCont { 109 display: -webkit-box; 110 display: -moz-box; 111 display: -ms-flexbox; 112 display: -webkit-flex; 113 display: -moz-flex; 114 display: flex; 115 justify-content: flex-start; 116 align-items: flex-start; 117 width: 100%; 118 box-sizing: border-box; 119 padding: 0 0% 0 11.4%; 120} 121@media (max-width: 767px) { 122 header#hdr #navToggle:checked ~ .gnav .gnavCont { 123 flex-direction: column; 124 height: 70vh; 125 overflow: scroll; 126 -webkit-overflow-scrolling: touch; 127 } 128} 129header#hdr #navToggle:checked ~ .gnav .gnavCont ul li { 130 float: none; 131 margin: 0 0 10px 0; 132 text-align: left; 133} 134header#hdr #navToggle:checked ~ .gnav .gnavCont ul li a { 135 font-size: 1.1rem; 136 transition: .4s; 137} 138@media (max-width: 767px) { 139 header#hdr #navToggle:checked ~ .gnav .gnavCont ul li a { 140 font-size: 1.6rem; 141 } 142} 143header#hdr #navToggle:checked ~ .gnav .gnavCont ul li a:hover { 144 opacity: .6; 145} 146header#hdr #navToggle:checked ~ .gnav .gnavCont ul li{ 147 padding-left: 30px; 148} 149header#hdr #navToggle:checked ~ .gnav .gnavCont ul li > div { 150 margin-bottom: 10px; 151} 152header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(1) { 153 width: 25.5%; 154} 155@media (max-width: 767px) { 156 header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(1) { 157 margin-bottom: 30px; 158 width: 100%; 159 } 160} 161header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(1) li a { 162 color: #fff; 163 font-family: 'Raleway', sans-serif; 164 font-size: 2.0rem; 165 font-weight: bold; 166} 167@media (max-width: 767px) { 168 header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(1) li a { 169 font-size: 2.0rem; 170 } 171} 172header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(2) { 173 width: 25.6%; 174} 175@media (max-width: 767px) { 176 header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(2) { 177 margin-bottom: 0px; 178 width: 100%; 179 } 180} 181header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(3) { 182 width: 25.5%; 183} 184@media (max-width: 767px) { 185 header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(3) { 186 margin-bottom: 30px; 187 width: 100%; 188 } 189} 190header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(4) { 191 width: 22%; 192} 193@media (max-width: 767px) { 194 header#hdr #navToggle:checked ~ .gnav .gnavCont ul:nth-child(4) { 195 margin-bottom: 30px; 196 width: 100%; 197 } 198} 199header#hdr #navToggle:checked ~ .gnav .gnavCont ul li a { 200 color: #cccccc; 201 text-decoration: none; 202} 203 204 205 /*subscstore original css*/ 206 header#hdr #navToggle:checked ~ .gnav .gnavCont ul li a { 207 font-size: 2rem; 208 transition: .4s; 209 } 210 body div[data-reactroot] > div > .border-bottom { 211 background-color: transparent !important; 212 border-bottom: none !important; 213 } 214 .navBtn{ 215 cursor:pointer; 216 } 217 header#hdr ul { 218 padding-left: 0; 219 margin-bottom: 0; 220 } 221 header#hdr li { 222 list-style:none; 223 } 224 header#hdr h1,header#hdr h2,header#hdr h3,header#hdr h4,header#hdr h5,header#hdr h6{ 225 margin-top:0; 226 margin-bottom:0; 227 } 228 header#hdr #navToggle{ 229 display: none; 230 } 231 header#hdr .navBtn{ 232 position: fixed; 233 top: 80px; 234 left: 80px; 235 z-index: 999; 236 } 237 @media (max-width: 767px) { 238 header#hdr .navBtn{ 239 position: fixed; 240 top: 0; 241 left: 0; 242 margin: 4%; 243 z-index: 999; 244 } 245 } 246

試したこと

似たような質問がたくさんあったので、jQueryでの対応を試してみたり、と
やってみましたが、リンククリック⇨メニュー閉じるは実現できませんでした...

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

gnavContクラスのaタグがクリックされたらnavToggleのチェックを外す。

JS

1$('.gnavCont a').click(function(){ 2 $('#navToggle').prop('checked', false); 3})

投稿2020/04/30 04:29

編集2020/04/30 04:31
soliste16

総合スコア757

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

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

rrgsn

2020/04/30 07:23 編集

test.jsに回答いただいた $('.gnavCont a').click(function(){ $('#navToggle').prop('checked', false); }); を追記したのですが、解決できませんでした....
soliste16

2020/04/30 07:28

それでもだめでしたら、</body>の手前でjsを読み込むか、このjsをready関数で囲むかしてください。 $(function(){ $('.gnavCont a').click(function(){ $('#navToggle').prop('checked', false); }) });
rrgsn

2020/04/30 09:40

ご回答いただいたもの全て試しましたが、ダメでした.... 念の為動作確認のものを丸々コピーし直したのですが、それも動作せず。 もしかしたらheadでの記載が誤っているのか..みていただけますか? <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>K-3.</title> <link rel=stylesheet type="text/css" href="style.css"> <link href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@1,200&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@300&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@200&display=swap" rel="stylesheet"> <script src="/~/js/easings.min.js"></script> <script src="/~/js/fullpage.js"></script> <script src="/~/js/scrolloverflow.min.js"></script> <script type="text/javascript" src="/~/js/test.js"></script> </head> 読み込みに関しては <script> $(function(){ // if document is ready alert('jQuery is ready.') }); </script> こちらでできていると確認済みです。
rrgsn

2020/04/30 09:42

fullpage.jsという慣れないものを利用しているので、 そちらも影響を受けているかもしれないです... $(document).ready(function(){ $(function(){ $('.gnavCont a').click(function(){ $('#navToggle').prop('checked', false); }) }); }); // スムーススクロール const paginations = document.querySelectorAll(".pagination a"); paginations.forEach(pagination => { pagination.addEventListener("click", e => { e.preventDefault(); const targetId = e.target.hash; const target = document.querySelector(targetId); target.scrollIntoView({ behavior: "smooth" }); }); }); // Intersection Observer const sections = document.querySelectorAll(".section"); const observerRoot = document.querySelector(".fullPageScroll"); const options = { root: observerRoot, rootMargin: "-50% 0px", threshold: 0 }; /** * 交差したときに呼び出す関数 * @param entries - IntersectionObserverEntry IntersectionObserverが交差したときに渡されるオブジェクトです。 */ function doWhenIntersect(entries) { entries.forEach(entry => { if (entry.isIntersecting) { activatePagination(entry.target); } }); }; /** * ページネーションの大きさを変える関数 * @param element - HTMLElement 現在表示中のスライドのHTML要素を引数に取ります。 */ function activatePagination(element) { const currentActiveIndex = document.querySelector( "#pagination .active" ); if (currentActiveIndex !== null) { currentActiveIndex.classList.remove("active"); } const newActiveIndex = document.querySelector( `a[href='#${element.id}']` ); newActiveIndex.classList.add("active"); }; $(window).on('load', function() { var observer = new IntersectionObserver(function(entries, observer) { if (entries[0].intersectionRatio > 0) { observer.unobserve(entries[0].target); $(entries[0].target).addClass('active'); } }); $('.scroll-animation').each(function(index, element) { observer.observe(element); }); }); Array.prototype.forEach.call(image, function(img) { observer.observe(img); }); });
soliste16

2020/04/30 10:02 編集

$('.scroll-animation').each(function(index, element) { observer.observe(element); }); }); ←一つ多いです ぱっと見これぐらいですけど、どうでしょうか。 これは見間違いですね・・・。
soliste16

2020/04/30 10:04

Array.prototype.forEach.call(image, function(img) { observer.observe(img); }); });←一つ多いです こっちですかね。
rrgsn

2020/04/30 11:03

試みましたが、改善できませんでした.....
soliste16

2020/04/30 11:33

head内でjQueryを読み込まずどこで読み込んでいるのか良く分からないのですが、少なくとも、提示されたコードで先ほど指摘した部分を修正したところ、こちらの方では動作確認ができましたので原因の断定は難しいです。エラー表示が出ていないか、JSを上記のものだけにする等のデバッグ作業を行ってもらうしかないと思います。
rrgsn

2020/04/30 13:48

動作確認用:https://codepen.io/soliste16/pen/yLYoRKJ 上記のサイトで、全く同じコードをうめこんだら、正常に作動しました...... 完全に迷子です。Atomでうまく反映されていないだけでしょうか.....
soliste16

2020/04/30 14:08 編集

少なくともエディタの問題ではないと思います。全く同じコードといっても、オフラインで読み込んでいるJSをすべてCDN読み込みにして試されたということでしょうか。 ・問題のjQueryの記述以外のJS部分は問題なく動く ・エラーが出ていない ということであれば、HTMLもすべてご提示頂かないと確実なことは言えません。もし全てのHTMLを頂いた上で、当方で問題なく動くようであれば完全に質問者さんの環境の問題ですのでお手上げです。
rrgsn

2020/04/30 14:32

色々触っていたら再現できなかったので、 もしかしたらただの間違いかもしれないです...もしわけございません... 実は特定のセクションにきたらアニメーションが作動する。というものを jQueryで行なっていたのですが、そちらもうまく作動していないので、 jqueryの読み込みがちゃんとできていない可能性もあります.... <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <title>K-3.</title> <link href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@1,200&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@300&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@200&display=swap" rel="stylesheet"> <link rel=stylesheet type="text/css" href="style.css"> <script src="/Users/xxxx/Desktop/KK/js/fullpage.js"></script> <script src="/Users/xxxx/Desktop/KK/js/jquery-3.5.0.js"></script> <script src="/Users/xxxx/Desktop/KK/js/test.js"></script> </head> <!--header--> <header id="hdr"> <input id="navToggle" type="checkbox" name="toggler"> <label for="navToggle" class="navBtn"><span></span><span></span><span></span></label> <!--<img class="logo" src="/Users/xxxx/Desktop/KK/images/logo.png">--> <div class="gnav"> <nav class="gnavCont"> <ul class="primary-menu"> <li><a href="#section1">Home</a></li> <li><a href="#section2">About</a></li> <li><a href="#section3">Company</a></li> <li><a href="#section4">Contact</a></li> </ul> </div> </div> </header> <!--header_end--> <body> <div class="wrapper"> <div class="fullPageScroll"> <section id="section1" class="section section1"> <h1>xxxxxxxxx</h1> <h2>xxxxxxxxxx</h2> <p class="sample-text1">xxxxxxxxxxxxxxxx</p> </section> <section id="section2" class="section section2"> <h1>About</h1> <h2>xxxxxxxxx</h2> <div class="img-wrap"> <img src="/Users/xxxx/Desktop/KK/images/xxx.jpg"> </div> </section> <section id="section3" class="section section3"> <h1>Company Profile</h1> <div class="img-wrap"> <img src="/Users/xxxx/Desktop/KK/images/header_image.jpg"> </div> <div class="about-profile-wrap"> <ul class="profile-lists"> <li class="profile-list"> <h4><span style="font-family: 'Noto Serif JP', serif;">会社名</span><span style="font-family: 'Raleway', sans-serif;"> / Company name</span></h4> <a>株式会社K-3.</a> </li> <li class="profile-list"> <h4><span style="font-family: 'Noto Serif JP', serif;">代表者</span><span style="font-family: 'Raleway', sans-serif;"> / Founder</span></h4> <a>xxxx</a> </li> <li class="profile-list"> <h4><span style="font-family: 'Noto Serif JP', serif;">設立日</span><span style="font-family: 'Raleway', sans-serif;"> / Date of establishment</span></h4> <a>2020/04/30</a> </li> <li class="profile-list"> <h4><span style="font-family: 'Noto Serif JP', serif;">事業内容</span><span style="font-family: 'Raleway', sans-serif;"> / Business line up</span></h4> <a>xxxxxx事業</a> </li> </ul> </div> </section> <section id="section4" class="section section4"> <h1>Contact</h1> <!-- xxxxxxxxxxxx CONTACT PAGE xxxxxxxxxxxxxxxxx --> <section id="contact"> <div class="contact-wrapper"> <!--xxxxxxxxxxxxxx CONTACT PAGE LEFT xxxxxxxxxxxxxxxxxx--> <form class="form-horizontal" role="form" method="post" action="contact.php"> <div class="form-group"> <div class="col-sm-12"> <input type="text" class="form-control" id="name" rows="2" cols="30" placeholder="Name" name="name" value=""> </div> </div> <div class="form-group"> <div class="col-sm-12"> <input type="email" class="form-control" id="email" rows="2" cols="30" placeholder="Email" name="email" value=""> </div> </div> <textarea class="form-control" id="textarea" rows="2" cols="30" placeholder="Message" name="message"></textarea> <button class="btn btn-primary send-button" id="submit" type="submit" value="SEND"> <div class="button"> <i class="fa fa-paper-plane"></i><span class="send-text">Send</span> </div> </button> </form> <!--xxxxxxxxxxxxxx CONTACT PAGE RIGHT xxxxxxxxxxxxxxxxxx--> <div class="direct-contact-container"> <ul class="contact-list"> <li class="list-item"><i class="fa fa-map-marker fa-2x"><span class="contact-text place">Aichi pre. / JP</span></i></li> <li class="list-item"><i class="fa fa-phone fa-2x"><span class="contact-text phone"><a href="tel:1-212-555-5555" title="Give me a call">(212) 555-2368</a></span></i></li> <li class="list-item"><i class="fa fa-envelope fa-2x"><span class="contact-text gmail"><a href="mailto:#" title="Send me an email">xxxx@gmail.com</a></span></i></li> </ul> <ul class="social-media-list"> <li><a href="#" target="_blank" class="contact-icon"> <i class="fa fa-github" aria-hidden="true"></i></a> </li> <li><a href="#" target="_blank" class="contact-icon"> <i class="fa fa-twitter" aria-hidden="true"></i></a> </li> <li><a href="#" target="_blank" class="contact-icon"> <i class="fa fa-instagram" aria-hidden="true"></i></a> </li> </ul> </div> </div> </section> </section> </div> </div> <nav id="pagination" class="pagination"> <a id="pagination1" href="#section1"></a> <a id="pagination2" href="#section2"></a> <a id="pagination3" href="#section3"></a> <a id="pagination4" href="#section4"></a> </nav> </body> </html>
soliste16

2020/04/30 15:05

やはり当方では上手く機能します。後はhtml内にscriptタグでJSを埋め込んでみるとかでしょうか。 そもそも下記は動いたんですよね。 <script> $(function(){ // if document is ready alert('jQuery is ready.') }); </script> また、fullpage.jsはjQueryの前に読み込まないと動作しないと思いますよ。
rrgsn

2020/04/30 15:19

$(function(){ // if document is ready alert('jQuery is ready.') }); でjQuery is readyのポップアップが表示されます。 後はhtml内にscriptタグでJSを埋め込んでみるとかでしょうか。 ⇨これでメニューバーの件解決しました!!!!本当にありがとうございます!! しかし、なぜjs上の表記ではだめだったのでしょうか......
soliste16

2020/04/30 15:30 編集

そもそも外部JS(test.js)が読み込まれていないとしか考えられません。ただ、読み込みタグを見るとその他のJSと同じ階層にあるようですから、他のJSが読み込まれているのであれば、ファイル名が違う以外の理由は分かりかねます。パスが正しいか、ファイル名が正しいか、ファイルの読み込み順があっているか等を今一度確かめてみるしかないと思います。 >また、fullpage.jsはjQueryの前に読み込まないと動作しないと思いますよ。 と書きましたけど書き間違えてますね。jQueryの後に読み込んでください。
rrgsn

2020/04/30 16:19

なるほど..... 他のjsが読み込まれないように他の階層に入れるべきですかね。 ファイルの順番など考えてもみなかったですが、承知しました! 色々と調べたら結構関係するようですね..... 本当に色々と長い間ありがとうございました!!!!!!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問