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

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

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

解決済

ハンバーガーメニューを展開するとメニュー裏のコンテンツのスクロール位置が一番上まで戻ってしまいます。

BB_Y66w_design
BB_Y66w_design

総合スコア1

1回答

0評価

1クリップ

285閲覧

投稿2022/01/20 06:34

ハンバーガーメニューを展開するとメニュー裏のコンテンツのスクロール位置が一番上まで戻ってしまいます。

ハンバーガーメニューやサイトタイトルを内包するheaderはposition:fixedで固定しており、スマホサイトを閲覧時に下にスクロールした後でもハンバーガーメニューをタップできるような仕様にしているのですが、ハンバーガーメニューをタップした瞬間にサイトが一番上までスクロールしてしまい、UXとしては最悪なものとなってしまっております。

色々検索し調べて試したのですが解決せず、こちらの質問版にご相談させていただいた次第です。

下記にソースコードを記載させていただきますのでご確認いただき、解決方法をご教授いただけますでしょうか?ご確認のほどよろしくお願いいたします。

html

<header class="navigation"> <div class="navigation__container"> <a href="#" class="navigation__container-sitetitle"> <h1>サイトタイトル</h1> </a> <div class="navigation__inner-pc"> <ul class="navigation__inner-pc-list"> <li><a href="#">テキストテキスト</a></li> <li class="has-child"> <a href="#">テキストテキスト</a> <ul> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> </ul> </li> <li class="has-child"> <a href="#">テキストテキスト</a> <ul> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> </ul> </li> <li><a href="#">テキストテキスト</a></li> </ul> <div class="navigation__inner-pc-mail"> <a href="#" target="_blank">テキストテキスト</a> </div> <div class="navigation__inner-pc-contact"> <a href="#" target="_blank">テキストテキスト</a> </div> </div> <a href="#" class="hamburger sp-display"> <span></span> <span></span> <span></span> <p class="menu-label">MENU</p> </a> </div> <div class="hamburger-content"> <ul> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> <li><a href="#">テキストテキスト</a></li> </ul> <div class="mail-magazine-btn"> <a href="#" target="_blank">テキストテキスト</a> </div> <div class="sub-contact-btn"> <a href="#" target="_blank">テキストテキスト</a> </div> </div> </header>

Sass

/* ヘッダーのスタイル */ .navigation { background: $white; position: fixed; top: 0; letter-spacing: -1px; width: 100%; z-index: 1000; -webkit-box-shadow: 0 4px 30px 0 rgba(0, 0, 0, 0.1); box-shadow: 0 4px 30px 0 rgba(0, 0, 0, 0.1); &__container { display: flex; justify-content: space-between; align-items: center; max-width: 1240px; margin: 0 auto; height: 80px; @media (max-width: 768px) { width: auto; padding: 0 20px; } &-sitetitle { h1 { font-size: 1.7rem; @media (max-width: 768px) { font-size: 1.2rem; } } } } &__inner-pc { display: flex; align-items: center; justify-content: space-between; @media (max-width: 768px) { display: none; } &-list { display: flex; align-items: center; li { position: relative; } a { font-size: 1.3rem; padding-right: 3.4rem; } .has-child ul { position: absolute; left: 0; z-index: 4; background: rgba(255, 255, 255, 0.7); width: 15rem; text-align: center; display: none; padding-top: 1rem; li { padding: 1rem 0; a { padding: 1rem 0; font-size: 1.3rem; } } } /*hoverしたら表示*/ .has-child:hover ul { display: block; } .has-child ul:hover ul { display: block; } } &-mail { a { color: $white; background: $red1; display: inline-block; padding: 1rem 1.5rem; font-size: 1.3rem; transition: 0.4s; text-align: center; } a:hover { opacity: 0.6; } } &-contact { a { color: $white; background: $red2; color: $white; display: inline-block; width: 14rem; font-size: 1.3rem; transition: 0.4s; text-align: center; margin-left: 1rem; padding: 1rem; } } } .hamburger { position: fixed; z-index: 10000; width: 36px; height: 21px; right: 30px; margin-top: -0.5em; transition: all 0.5s; span { position: absolute; left: 0; width: 100%; height: 1px; background-color: #333333; &:first-of-type { top: 0; } &:nth-of-type(2) { top: 10px; } &:nth-of-type(3) { bottom: 0; } } .menu-label { position: absolute; width: 100%; bottom: -21px; right: 0px; letter-spacing: 0.08em; margin-bottom: 0; width: auto; font-size: 1rem; text-align: center; } &.active { transform: rotate(180deg); } &.active .menu-label { opacity: 0; transition: all 0.3s; } &.active span:nth-of-type(1) { transform: rotate(-45deg); top: 10px; } &.active span:nth-of-type(2) { opacity: 0; } &.active span:nth-of-type(3) { transform: rotate(45deg); top: 10px; } } .hamburger-content { opacity: 0; position: absolute; z-index: -1000; width: 100%; height: 100%; background-color: $white; overflow-y: scroll; text-align: center; transition: all 0.5s; li { width: 100%; font-size: 1.4rem; height: 50px; line-height: 60px; } .mail-magazine-btn { a { background: $red1; color: $white; display: inline-block; padding: 1rem 1.5rem; font-size: 1.3rem; letter-spacing: 0; transition: 0.4s; text-align: center; width: 25rem; margin-top: 2rem; } } .sub-contact-btn { height: auto; padding: 10px 20px; margin: 0 auto; border: 1px solid #000; width: 25rem; a { font-size: 1.3rem; color: $white; padding: 0.5rem 2rem; background: $red2; width: 16rem; } } &.active { opacity: 1; z-index: 9999; padding: 3rem; position: fixed; top: 0; left: 0; background-color: $white; overflow-y: scroll; text-align: center; transition: all 0.5s; } } }

javascript

$(function () { $(".hamburger").click(function () { $(this).toggleClass("active"); if ($(this).hasClass("active")) { $(".hamburger-content").addClass("active"); } else { $(".hamburger-content").removeClass("active"); } }); });

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る