takopitto
@takopitto

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ハンバーガメニューの画面はみだしによる、横スクロールを解決したいです。

解決したいこと

ハンバーガメニューの画面はみだしによる、横スクロールを解決したいです。

右側からスライドするハンバーガメニューを作成し、デベロッパーツールで画面を収縮させて確認してみたところ、下記の画像のように画面からはみだしてしまいます。

ヘッダーは、スクロール時に固定される動きをします。そのヘッダーとの相性が悪いのか、スクロール後にハンバーガーメニューのはみだしが出てきてしまいます。

親要素であるheaderにoverflow: hidden;をいれたり、色々試してみたのですが、うまくいきませんでした。

実際のサイト
https://taeko-k.com/sample/chukyuex/

*ハンバーガーメニューを閉じていて、はみ出している状態
Web キャプチャ_23-4-2022_141925_.jpeg

*ハンバーガーメニューを開いている状態
Web キャプチャ_23-4-2022_15659_.jpeg

該当するソースコード

 <!--HTML -->
 <header id="header">
        <div class="header-inner">
                <!-- ハンバーガーメニューのボタン -->
                <div class="hamburger-button">
                    <span></span>
                    <span></span>
                    <span></span>
                </div>
            </div>
        </div>

      <!-- ハンバーガーメニューの中身 -->
      <div id="hamburger-menu">
        <ul class="hamburger-menu">
            <li><a href="room.html">お部屋</a></li>
            <li><a href="dishes.html">お料理</a></li>
            <li><a href="onsen.html">温泉</a></li>
        </ul>
    </div>
 </header>
    
 <!--CSS -->
/*ヘッダー*/
#header {
    height:80px;
    position: fixed;
    z-index: 10;
    width: 100%;
    color:#FFFFFF;
    z-index: 997;
}

#header .header-inner{
    height:80px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding:20px;
}

  /* スクロール時の固定ヘッダー */
        #header.fixed {
        position: sticky;
        top: 0;
        left:0;
        width: 100%;
        z-index: 997;
        background-color:rgba(255,255,255,0.95);
        transition: 0.8s;
        }

        #header.fixed .header-inner{
            display: flex;
            justify-content: space-between;
            width: 100%;
            margin: 0 auto;
        }

   /* ハンバーガメニュー中身 */
            #header #hamburger-menu{
                display: block;
            }

            #hamburger-menu {
                    width: 300px;
                    height: 100vh;
                    background: #000;
                    color: #fff;
                    position: absolute;
                    right: -300px; 
                    padding-top: 40px;
                    transition: 0.3s ease-out;
                    z-index: 999;
                    overflow: hidden;
                }
            
                #hamburger-menu ul{
                    flex-wrap: wrap;
                    padding-left: 0px;
                    padding-top: 100px;  
                }

                #hamburger-menu li {
                    margin-bottom: 50px;
                    width: 100%;
                    font-size: 18px;
                    text-align: center;
                    transition: 0.4s;
                }

                #hamburger-menu.open {
                   right: 0;
                   transition: 0.3s ease-out;
                    }
    
 ///jquery 
//  スクロール時の固定ヘッダー 
$(function(){
 $(window).on('scroll', function() {
    $('#header').toggleClass('fixed', $(this).scrollTop() > 10);
    });
});

// ハンバーガーメニュー
$(function(){
    $('.hamburger-button').click(function(){
    $('.hamburger-button').toggleClass('active');
    $('#hamburger-menu').toggleClass('open');
});
});
    

自分で試したこと

⓵親要素であるheaderや、スクロール固定ヘッダーの#header.fixed 、#hamburger-menu、innerやbodyなどに、overflow: hidden;を適用。

参考記事:
https://jajaaan.co.jp/web-production/frontend/position/

*****

コーダーとしてまだまだ未熟者であるうえ、分かりづらい質問となってしまい大変申し訳ありませんが…お力添えいただけますと幸いです。

どうぞよろしくお願いいたします。

0

3Answer

Comments

  1. @takopitto

    Questioner

    お忙しいなかご回答いただき、誠にありがとうございます。

    おっしゃる通り、スクロール時のヘッダーである#header.fixedに、position: fixed;を指定したら解決いたしました!!position: sticky;だとはみ出してしまうようですね…。

    ずっと悩んでいたので本当に助かりました。。。心より感謝申し上げます(#^^#)

試してみたけど、はみ出す原因はここだった。
ここを0pxにするか、box-sizing: border-box;を指定。
border, margin, paddingbox-sizingの関係について詳しく調べてみてね。

#header .header-inner{
    height:80px;
    display: flex;
    justify-content: space-between;
    align-items: center;
-    padding:20px;
}
1Like

Comments

  1. @takopitto

    Questioner

    お忙しいなかご回答いただき、誠にありがとうございます。
    また、わざわざ試していただいたうえでのご回答、本当に感謝しております。

    なるほどです…border・ margin・paddingとbox-sizingの関係についての知識がなく、大変勉強になりました!無事問題も解決いたしました。

    ずっと悩んでいたので本当に助かりました。。。心より感謝申し上げます(#^^#)

無事、問題が解決いたしました。
皆様、お忙しいなかお力添えいただいただきまして、誠にありがとうございました。
今後ともどうぞよろしくお願いいたします。

1Like

Your answer might help someone💌