今回はスクロールに合わせてヘッダーサイズを変化させる実装を紹介します。
前回はヘッダーを単純に固定させる方法を紹介しました。
ヘッダーを固定で表示させたい時、高さが大きいと見える範囲が狭まりユーザーに不便な思いをさせてしまします。
そんな時は、スクロールに合わせてヘッダーを少し小さくしてあげると見える範囲が少し広がり、ユーザーに親切です。
早速デモサイトを見てみましょう。
【スクロールに合わせてヘッダーサイズを変化】HTML編
<header>
<h1><img src="logo.png" alt="英語好きフリーランスの旅日記"></h1>
<nav>
<ul>
<li><a href="#">ホーム</a></li>
<li><a href="#">アバウト</a></li>
<li><a href="#">サービス</a></li>
<li><a href="#">会社概要</a></li>
<li><a href="#">お問い合わせ</a></li>
</ul>
</nav>
</header>
<main>
<div class="content"><img src="content.jpg"></div>
</main>
【スクロールに合わせてヘッダーサイズを変化】CSS編
*{
margin:0;
padding:0;
box-sizing: border-box;
}
li{
list-style: none;
}
img{
display: block;
}
header{
display: flex;
justify-content: space-between;
align-items: center;
height: 200px;
position: fixed;
top: 0;
width: 100%;
background: #fbf4ec;
transition: .3s;
}
.is-animation{
height: 100px;
}
ul{
display: flex;
justify-content: space-between;
}
ul li{
width: 120px;
text-align: center;
}
ul li a{
display: block;
text-decoration: none;
color: #333;
}
main{
padding-top: 200px;
}
.content img{
width: 100%;
}
解説です。
header{
display: flex;
justify-content: space-between;
align-items: center;
height: 200px;
position: fixed;
top: 0;
width: 100%;
background: #fbf4ec;
transition: .3s;
}
position:fixedでヘッダーを固定します。
main{
padding-top: 200px;
}
position:fixedで直下の要素が回り込んできてしまうので、padding-topで余白をとります。
.is-animation{
height: 100px;
}
スクロールした時に追加してあげるclassです。
【スクロールに合わせてヘッダーサイズを変化】jQuery編
$(function() {
var $win = $(window),
$header = $('header'),
animationClass = 'is-animation';
$win.on('load scroll', function() {
var value = $(this).scrollTop();
if ( value > 100 ) {
$header.addClass('is-animation');
} else {
$header.removeClass('is-animation');
}
});
});
解説です。
if ( value > 100 ) {
$header.addClass(animationClass);
} else {
$header.removeClass(animationClass);
}
スクロール量が指定した数値以上(今回は100)になったらヘッダーにclassを付与します。