概要
ヘッダを上部に固定しつつ、スクロールに合わせて拡大・縮小させる方法を紹介します。
ダウンロード
※ファイルの場所は上記サイトの resize-header-on-scroll フォルダです。
HTMLマークアップはヘッダー部のHEADER要素とH1要素、コンテンツ部のMAIN要素のみです。
HTML
<header> <h1 id="site-logo">smart</h1> </header> <main id="main"> </main>
スクロールの位置によるヘッダーの拡大・縮小の仕掛けは簡単で、スクロール位置によってHEADER要素に拡大・縮小用のクラスを追加・削除します。
あとはCSSのアニメーションをHEADER要素に付けてあげるだけです。
スクロール位置の取得は scrollTop() を使います。
$(window).scrollTop()
CSSはHEADER要素、H1要素、MAIN要素に必要最低限の設定をしています。
HEADER要素は position: fixed で位置を固定し、HEDER要素とH1要素ともに transition で拡大・縮小のアニメーションを設定しています。
CSS
/*#########################################################
レイアウト
#########################################################*/
/* ヘッダ */
header {
width: 100%;
overflow: hidden;
position: fixed;
top: 0;
left: 0;
z-index: 100;
background-color: black;
text-align: center;
-moz-transition: height 0.3s;
-o-transition: height 0.3s;
-webkit-transition: height 0.3s;
transition: height 0.3s;
}
/* サイトロゴ */
header h1#site-logo {
line-height: 2;
font-family: "Limelight", cursive;
font-size: 6rem;
color: white;
-moz-transition: all 0.3s;
-o-transition: all 0.3s;
-webkit-transition: all 0.3s;
transition: all 0.3s;
}
/* 縮小時のサイトロゴ */
header.smaller h1#site-logo {
font-size: 3rem;
}
/* メインカラム */
#main {
background-color: white;
height: 20000px;
}
ここで注目したいのは縮小時のサイトロゴ設定です。
smallerクラスが着いた際、通常時よりもフォントサイズを小さくしています。
/* 縮小時のサイトロゴ */
header.smaller h1#site-logo {
font-size: 3rem;
}
これで準備が整いました。
あとはJavaScriptで smaller クラスをスクロール位置によってつけたり削除したりといった処理を書くだけです。
JavaScript
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
function init() {
// スクロールして何ピクセルでアニメーションさせるか
var px_change = 300;
// スクロールのイベントハンドラを登録
window.addEventListener('scroll', function(e){
// 変化するポイントまでスクロールしたらクラスを追加
if ( $(window).scrollTop() > px_change ) {
$("header").addClass("smaller");
// 変化するポイント以前であればクラスを削除
} else if ( $("header").hasClass("smaller") ) {
$("header").removeClass("smaller");
}
});
}
window.onload = init();
</script>