前提・実現したいこと
グローバルメニューの作成でハマッていましたが、
以下の方法で一旦応急的に解決しています。
やりたいことは、
グローバルメニューを開いた位置で背景が固定され、グローバルメニューを閉じてもそのままの位置をキープする
というグローバルメニューです。
発生している問題・コード
先ほど、問題となっているコード等を書きましたが、一旦下記方法にて応急的に問題なく動いています。
touch closeエリアとメニューボタンを押しても背景を固定することができました。
ただ、処置としては右上のバーガーメニューの上に透明の別の要素を被せてそこをクリックするという方法になります。
以下、コードになります。
<script> $(function(){ $('#gnavi .menu').hide(); $('#gnavi .btn').click(function(){ $('#gnavi').toggleClass('active'); $('#gnavi .menu, #gnavi .closer').fadeToggle(); posi = $(window).scrollTop(); $('body').css({ position: 'fixed', top: -1 * posi }); }); $('#gnavi .closer, #gnavi .close-btn').click(function(){ $('#gnavi').toggleClass('active'); $('body').attr('style', ''); $('html, body').prop({scrollTop: posi}); $('#gnavi .menu, #gnavi .closer').fadeToggle(); }); }); </script> <style> /* -- Global Navigation -- */ #gnavi { position: relative; z-index: 50; } /* botton-position */ #gnavi .area { position: fixed; top: 24px; right: 8px; z-index: 30; } /* botton-design */ #gnavi .btn, #gnavi .close-btn { display: none; position: relative; width: 54px; height: 54px; border-radius: 50%; border: 1px solid #f0f0f0; background: rgba(255,255,255,.8); cursor: pointer; z-index: 40; } #gnavi .close-btn { position: absolute; top: 0; left: 0; height: 72px; border-radius: 0; border: 0; background: none; } @media (max-width: 800px) { #gnavi .btn { display: block; } } #gnavi .bar { position: relative; width: 32px; margin: 15px auto; } #gnavi .bar span { display: block; position: absolute; left: 0; width: 100%; height: 2px; background: #333333; -webkit-transition: .35s ease-in-out; -o-transition: .35s ease-in-out; transition: .35s ease-in-out; } #gnavi .bar span:nth-child(1) { top: 0; } #gnavi .bar span:nth-child(2) { top: 10px; } #gnavi .bar span:nth-child(3) { top: 20px; } #gnavi small { position: absolute; bottom: -20px; right: 0; width: 56px; font-size: 12px; } /* botton-animation */ #gnavi.active .close-btn { display: block; } #gnavi.active .bar span:nth-child(1) { top: 11px; -webkit-transform: rotate(-45deg); -ms-transform: rotate(-45deg); transform: rotate(-45deg); } #gnavi.active .bar span:nth-child(2) { width: 0; left: 50%; } #gnavi.active .bar span:nth-child(3) { top: 11px; -webkit-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); } /* gnavi-closer */ #gnavi .closer { display: none; position: fixed; bottom:0; left: 0; width: 100%; height: 15%; cursor: pointer; background: rgba(0,0,0,.8); color: #fff; z-index: 20; } #gnavi .closer span { display: inline-block; padding-left: 24px; background: url(../img/com-gnavi-btn-close.png) no-repeat; background-position: left top 2px; background-size: 22px; font-size: 18px; } /* gnavi-menu-area */ #gnavi .menu { display: none; position: fixed; top: 0; left: 0; right: 0; width: 100%; height: 100%; z-index: 10; overflow-y: scroll; -webkit-overflow-scrolling: touch; background:url(../img/img-common-bg-gnavi.jpg) repeat; background: #ccc; } /* gnavi-menu-inner */ #gnavi .inn { max-width: 560px; margin: auto; padding: 0 24px 24px; } /* gnavi-item */ #gnavi .item { } /* gnavi-link */ #gnavi .link { display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; cursor: pointer; } </style> <!-- HTML --> <div id="gnavi"> <div class="area"> <div class="closer"><span>touch close</span></div> <!-- 開閉ボタン --> <div class="btn"> <small>メニュー</small> <div class="bar"> <span></span> <span></span> <span></span> </div> <!-- /.btn-bar --> </div> <!-- /.btn --> <div class="close-btn"></div> <nav> <div class="menu"> <ul class="inn"> <li class="item"><div>リンク</div><a class="link" href="#"></a></li> <li class="item"></li> <li class="item"></li> </ul> </div> <!-- /.menu --> </nav> </div> <!-- /.gnavi__area --> </div> <!-- /#gnavi --> <!-- ------------------------------------------ << / GLOBAL NAVI >> ------------------------------------------ --> </div> <!-- /.mvisual_header --> </div> <!-- /.mvisual_inn --> </div> <!-- /.mvisual__area --> </div> <!-- /#header --> </header>
一応上記で動いていますが、もう少しスマートなやり方はないでしょうか?
ボタンの上に別の要素を被せるのではなく、JQueryでなんとかできればと思います。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー