@kencellarafood

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

グローバルメニューの表示方法

解決したいこと

レスポンシブル対応時に限定して、ページトップの位置でも、ナビゲーションメニューを表示できるようにしたいです。

スクリーンショット 2023-12-29 223126.png
最終的に実現したい画面は、上記の画像のものになります。
PC表示では、ヘッダー内で内容を通常表示、レスポンシブル対応時では、ヘッダーからスクロールすると、実現したい画面を表示できています。

スクリーンショット 2023-12-29 223137.png
しかし、ヘッダー表示時になると、開閉ボタンを押しても、上手く表示されません。

初心者のため、お力添えいただけると助かります。
よろしくお願いします。

HTML

<header id="header">
            <h1 class="site-title"><a href="index.html"><img src="img/logo.png" alt="company-logo"></a></h1>
            <nav id="g-navi">
            <ul>
                <li><a href="plan.html">HP制作</a></li>
                <li><a href="coaching.html">ITコーチング</a></li>
                <li><a href="food-support.html">飲食店支援</a></li>
                <li><a href="about.html">会社概要</a></li>
                <li><a href="contact.html">お問い合わせ</a></li>
            </ul>
            </nav>
        </header>


        <div class="openbtn"><span></span><span></span><span></span></div>

CSS

#header {
    display: flex;
    max-width: 3500px;
    justify-content: space-between;
    align-items: center;
    margin: 0 auto;
    padding: 0 2%;
    height: 90px;
    background-color: #141622e3;
}


#header .site-title {
    line-height: 1px;
    width: 90px;
}
#header ul {
    display: flex;
}
#header li {
    font-size: 1.1rem;
    margin-left: 15px;
}
  #header li a {
    color: whitesmoke;
    font-weight: bold;
    font-size: 1.1em;
    transition: all 0.3s ease;
    filter: drop-shadow(1px 1px 2px #121212);
 }
  #header li a:hover {
    opacity: 0.8;
    color: #d192be;
}

/*スクロール時に切り替え*/

/*ボタン全体の形状*/
.openbtn{
display: none;
  /*ボタンの位置*/
position:fixed;
top:10px;
right: 10px;
z-index: 500;
  /*ボタンの形状*/
background:#616161;
cursor: pointer;
width: 50px;
height:50px;
border-radius: 4px;
}

/*ボタンのアイコン設定*/
.openbtn span{
  display: inline-block;
  transition: all .4s;
  position: absolute;
  left: 14px;
  height: 3px;
  border-radius: 2px;
  background-color: #fff;
  width: 45%;
}

.openbtn span:nth-of-type(1) {
  top:15px;	
}
.openbtn span:nth-of-type(2) {
  top:23px;
}
.openbtn span:nth-of-type(3) {
  top:31px;
}

/*activeクラスが付与された後のボタンのアイコン設定*/
.openbtn.active span:nth-of-type(1) {
  top: 18px;
  left: 18px;
  transform: translateY(6px) rotate(-45deg);
  width: 30%;
}
.openbtn.active span:nth-of-type(2) {
opacity: 0;
}
.openbtn.active span:nth-of-type(3){
  top: 30px;
  left: 18px;
  transform: translateY(-6px) rotate(45deg);
  width: 30%;
}

/*fadeDownクラスが付与された後のボタンの出現アニメーション設定*/
.fadeDown {
  animation-name: fadeDownAnime;
  animation-duration: 0.7s;
  animation-fill-mode: forwards;
  opacity: 0;
  display: block;
}
@keyframes fadeDownAnime{
from {
  opacity: 0;
transform: translateY(-100px);
}
to {
  opacity: 1;
transform: translateY(0);
}
}
/*========= ヘッダーナビゲーションのためのCSS ===============*/
/*.doneクラスがついたヘッダー*/
#header.dnone {
	opacity: 0;/*透過0にして非表示に*/
}

/*メニューボタンをクリックした際に付与されるpanelactiveクラスがついたら*/
#header.dnone.panelactive {
	opacity: 1;/*不透明にして出現*/
}
/*.doneクラスがついたヘッダーのテキストナビゲーションの形状*/
#header.dnone #g-navi{
  /*固定位置にして最背面に*/
  position:fixed;
  top: 0;
  left: 0;
  z-index: -1;
  /*高さと幅*/  
  width:100%;
  height: 100vh;
  /*天地中央&テキスト中央揃え*/  
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
  /*はじめは透過0に*/  
  opacity: 0;
  transition: all 0.4s;
}

/*メニューボタンをクリックした際に付与されるpanelactiveクラスがついたナビゲーションの形状*/
#header.dnone.panelactive #g-navi{
opacity: 1;/*不透明に*/
z-index:3;/*最前面に*/
background-color:#141622e3;
}

#header.dnone.panelactive #g-navi ul{
display:block;/*flexの横並びをblockにして縦並びに*/
}

/*リストの形状*/
#header.dnone.panelactive #g-navi li a{
color: whitesmoke;
text-decoration: none;
padding:10px;
display: block;
text-transform: uppercase;
letter-spacing: 0.1em;
font-weight: bold;
transition:all 0.3s;
text-align: left;
}
section{
  position: relative;
  z-index: 1;
}
#header.dnone.panelactive #g-navi li a:hover {
  opacity: 0.8;
  color: #d192be;
}

CSS(レスポンシブル対応)

@media screen and (max-width: 610px) {

    #header {
      height: 75px;
    }
    #header #g-navi {
      display: none;
    }
    .openbtn {
      display: block;
    }

}

CSS(レスポンシブル対応)

//スクロールをするとハンバーガーメニューに変化するための設定を関数でまとめる
function FixedAnime() {
	//ヘッダーの高さを取得
	var headerH = $('#header').outerHeight(true);
	var scroll = $(window).scrollTop();
	if (scroll >= headerH){//ヘッダーの高さ以上までスクロールしたら
			$('.openbtn').addClass('fadeDown');//.openbtnにfadeDownというクラス名を付与して
			$('#header').addClass('dnone');//#headerにdnoneというクラス名を付与
		}else{//それ以外は
			$('.openbtn').removeClass('fadeDown');//fadeDownというクラス名を除き
			$('#header').removeClass('dnone');//dnoneというクラス名を除く
		}
}

// 画面をスクロールをしたら動かしたい場合の記述
$(window).scroll(function () {
	FixedAnime();//スクロールをするとハンバーガーメニューに変化するための関数を呼ぶ
});

// ページが読み込まれたらすぐに動かしたい場合の記述
$(window).on('load', function () {
	FixedAnime();//スクロールをするとハンバーガーメニューに変化するための関数を呼ぶ
});


//ボタンをクリックした際のアニメーションの設定
$(".openbtn").click(function () {//ボタンがクリックされたら
	$(this).toggleClass('active');//ボタン自身に activeクラスを付与し
    $("#header").toggleClass('panelactive');//ヘッダーにpanelactiveクラスを付与
});
$("#g-navi li a").click(function () {//ナビゲーションのリンクがクリックされたら
    $(".openbtn").removeClass('active');//ボタンの activeクラスを除去し
    $("#header").removeClass('panelactive');//ヘッダーのpanelactiveクラスも除去
});


//リンク先のidまでスムーススクロール
//※ページ内リンクを行わない場合は不必要なので削除してください
    $('#g-navi li a').click(function () {
	var elmHash = $(this).attr('href');
	var pos = $(elmHash).offset().top-0;
	$('body,html').animate({scrollTop: pos}, 1000);
	return false;
});


0 likes

No Answers yet.

Your answer might help someone💌