グローバルナビゲーション
-スクロール途中からヘッダーの高さが小さくなる-
See the Pen 5-1-8 スクロール途中からヘッダーの高さが小さくなる by 動くWebデザインアイディア帳 (@ugokuweb) on CodePen.
「Result」内をスクロールして動きを確かめてね!
動きを実現する仕組み
jQueryを使い、ヘッダーの高さ以上までスクロールをしたら、ヘッダーにクラス名を付与する。
クラスが付与されたらCSS で高さを変更。
[使用するライブラリ]
* jQuery
HTMLの書き方
- head終了タグ直前に自作のCSSを読み込みます。
<link rel="stylesheet" type="text/css" href="css/5-1-8.css"> </head>
- 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>© copyright.</small> </footer>
- 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;
});
バリエーション
を見る
ドロップダウンメニュー(上)
ドロップダウンメニュー(左)
ドロップダウンメニュー(写真付 上ナビ)
ドロップダウンメニュー(写真付 左ナビ)
スクロールすると上部に固定
スクロール途中から上部固定
スクロールするとハンバーガーメニューに変化
スクロール途中でヘッダーが消え、上にスクロールすると復活
スクロールすると位置が固定して追従
クリックしたらナビが上から下に出現
クリックしたらナビが下から上に出現
クリックしたらナビが左から右に出現
クリックしたらナビが右から左に出現
クリックしたら背景が全面に広がる
クリックしたら円形背景が拡大(上から)
クリックしたら円形背景が拡大(下から)
クリックしたら円形背景が拡大(右から)
クリックしたら円形背景が拡大(左から)
クリックしたら円形背景が拡大(右上から)
クリックしたら円形背景が拡大(右下から)
クリックしたら円形背景が拡大(左上から)
クリックしたら円形背景が拡大(左下から)
クリックしたら円形背景が拡大(中央から)
クリックしたらナビ背景コンテンツがぼかされる
追従メニューの現在地ハイライト
「機能」に関わる
動き一覧
基礎から学びたい方へ
Webサイトの動きを実現する仕組みと
準備について基礎から学びたい方は
下記をまず読み、基本を理解してから
コピペしましょう
Webサイトの動きを
実現する仕組みと準備
書籍情報
紙面だからこそできるまとめ方でコードを説明し、
全体を俯瞰して調べることが出来る構成になっています。
もちろん、パーツのサンプルコードもzipでまとめてダウンロードできます。
購入をしてくださった方には特典がありますので是非チェックしてみてください!