スクロール途中からヘッダーの高さが小さくなる

グローバルナビゲーション
-スクロール途中からヘッダーの高さが小さくなる-

デモページを見る

See the Pen 5-1-8 スクロール途中からヘッダーの高さが小さくなる by 動くWebデザインアイディア帳 (@ugokuweb) on CodePen.

「Result」内をスクロールして動きを確かめてね!

動きを実現する仕組み

jQueryを使い、ヘッダーの高さ以上までスクロールをしたら、ヘッダーにクラス名を付与する。
クラスが付与されたらCSS で高さを変更。

[使用するライブラリ]
* jQuery

HTMLの書き方

  1. head終了タグ直前に自作のCSSを読み込みます。
    <link rel="stylesheet" type="text/css" href="css/5-1-8.css">
    </head>
  2. body内にヘッダーのナビゲーションとコンテンツのHTMLを記載します。
    <header id="header">
    <h1>Logo</h1>
    <nav>
    <ul id="g-navi">
    <li><a href="#area-1">Area1</a></li>
    <li><a href="#area-2">Area2</a></li>
    <li><a href="#area-3">Area3</a></li>
    </ul>
    </nav>
    </header>
    <main>
    <section id="area-1">
    <h2>Area 1</h2>
    <p>内容が入ります。</p>
    <!--/area1--></section>
    <section id="area-2">
    <h2>Area 2</h2>
    <p>内容が入ります。</p>
    <!--/area2--></section>
    <section id="area-3">
    <h2>Area 3</h2>
    <p>内容が入ります。</p>
    <!--/area3--></section>
    <section id="area-4">
    <h2>Area 4</h2>
    <p>内容が入ります。</p>
    <!--/area4--></section>
    <!--/main--></main>
    <footer id="footer">
    <small>&copy; copyright.</small> 
    </footer>
  3. body 終了タグ直前に jQuery、動きを制御する自作のJS の2 つを読み込みます。
    <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
    <!--自作のJS-->
    <script src="js/5-1-8.js"></script>
    </body>

自作のCSS内の書き方

/*========= スクロール途中からヘッダーの高さが小さくなるためのCSS ===============*/
#header{
    /*はじめの高さを設定*/
	height: 170px;
	width:100%;
   /*以下はレイアウトのためのCSS*/
	display: flex;
	justify-content: space-between;
	align-items: center;
	background:#333;
	color:#fff;
	text-align: center;
	padding: 20px;
}

/*HeightMinというクラス名がついたら高さを小さく、上部固定に*/
#header.HeightMin{
	position: fixed;
    z-index: 999;/*最前面へ*/
	height:70px;
	animation: DownAnime 0.5s forwards;
}

@keyframes DownAnime{
  from {
  	opacity: 0;
	transform: translateY(-170px);
  }
  to {
  	opacity: 1;
	transform: translateY(0);
  }
}

/* 以下は検証用のレイアウトのための CSS*/
nav ul{
list-style: none;
display: flex;
justify-content: center;
}

nav ul li a{
text-decoration: none;
color: #666;
padding:10px;
}

section{
padding:300px 0;
}

自作のJS内の書き方

var headerH = $("#header").outerHeight(true);//headerの高さを取得    

//スクロール途中からヘッダーの高さを変化させるための設定を関数でまとめる
function FixedAnime() {
	//ヘッダーの高さを取得
	var scroll = $(window).scrollTop();
	if (scroll >= headerH){//ヘッダーの高さを超えたら
        $('#header').addClass('HeightMin');//#headerについているHeightMinというクラス名を付与
	}else{
        $('#header').removeClass('HeightMin');//HeightMinというクラス名を除去
	}    
}

// 画面をスクロールをしたら動かしたい場合の記述
$(window).scroll(function () {
	FixedAnime();//スクロール途中からヘッダーの高さを変化させる関数を呼ぶ
});

// ページが読み込まれたらすぐに動かしたい場合の記述
$(window).on('load', function () {
	FixedAnime();//スクロール途中からヘッダーの高さを変化させる関数を呼ぶ
});


//リンク先のidまでスムーススクロール
//※ページ内リンクを行わない場合は不必要なので削除してください
$('#g-navi li a').click(function () {
	var headerVal = $("#header").outerHeight(true);	//現在のheaderの高さを取得    

	//ヘッダーが高さの状態を取得してスクロールする範囲を調整する
	var scroll = $(window).scrollTop();	//スクロール
	var adjust = 0						//調整の変数
	if(scroll <= headerVal ){			//スクロールとヘッダーの高さを取得
		adjust = 70;					//スクロール値がヘッダーの高さ以内であれば調整変数に70を入れる
	}
	
	var elmHash = $(this).attr('href'); //hrefを取得
	var pos = $(elmHash).offset().top-headerVal-adjust;	//クリックしたheader分の高さと調整分を引いた高さまでスクロール
	
	$('body,html').animate({scrollTop: pos}, 1000);
	return false;
});

バリエーション
を見る

「機能」に関わる
動き一覧

書籍情報

紙面だからこそできるまとめ方でコードを説明し、
全体を俯瞰して調べることが出来る構成になっています。

もちろん、パーツのサンプルコードもzipでまとめてダウンロードできます。
購入をしてくださった方には特典がありますので是非チェックしてみてください!

書籍紙面サンプル

出版社:ソシム株式会社
2021/2/27 発売

書籍紙面サンプル

出版社:ソシム株式会社
2021/7/31 発売

Page
Top