特定位置までスクロールすると、要素が追従してくる処理を実装してみます。
サンプルコード
ヘッダーの下に配置したナビゲーションを、スクロール時は上部に追従するようにしてみます。
HTML
.navを追従します。
<div id="page"> <header class="header"> ヘッダー </header> <div class="nav-wrapper"> <div class="nav"> ナビゲーション </div> </div> <div class="contents"> <p>メインコンテンツ</p> </div> </div>
CSS
追従時は.is-fixedを付与して、position: fixed;が適用されるようにします。
.is-fixedが付与されたときに.navの高さ分ずれてしまうのを防ぐために、.navを.nav-wrapperで括って高さ分の領域を確保しています。
.header { height: 50px; background: #999999; } .nav-wrapper { /* .navの領域確保用 */ height: 50px; } .nav { top: 0; left: 0; width: 100%; height: 50px; background: #666666; } .nav.is-fixed { position: fixed; } .contents { width: 960px; height: 1500px; margin: 0 auto; background: #cccccc; }
JavaScript
スクロール位置に応じて.is-fixedを付与します。
$(function() { var $fixElement = $('.nav'); // 追従する要素 var baseFixPoint = $fixElement.offset().top; // 追従する要素の初期位置 var fixClass = 'is-fixed'; // 追従時に付与するclass // 要素が追従する処理 function fixFunction() { var windowScrolltop = $(window).scrollTop(); // スクロールが初期位置を通過しているとき if(windowScrolltop >= baseFixPoint) { $fixElement.addClass(fixClass); } else { $fixElement.removeClass(fixClass); } } $(window).on('load scroll', function() { fixFunction(); }); });
先ほどとほぼ同じですが、コンテンツ中にあるナビゲーションを追従させてみます。
HTML
<div id="page"> <header class="header"> ヘッダー </header> <div class="contents"> <div class="visual"> メインビジュアル的なもの </div> <div class="nav-wrapper"> <div class="nav"> ナビゲーション </div> </div> <div class="main"> <p>メインコンテンツ</p> </div> </div> </div>
CSS
.header { height: 50px; background: #999999; } .contents { position: relative; } .visual { width: 960px; margin: 0 auto; padding: 200px 0; color: #ffffff; text-align: center; background: #333333; } .nav-wrapper { /* .navの領域確保用 */ height: 50px; } .nav { top: 0; left: 0; width: 100%; height: 50px; background: #cccccc; } .nav.is-fixed { position: fixed; } .main { width: 960px; height: 1500px; margin: 0 auto; background: #666666; }
JavaScriptは先ほどと同じため、省略します。
コンテンツ中のナビゲーション追従のデモページ
サイドナビを追従させてみます。
HTML
<div id="page"> <header class="header"> ヘッダー </header> <div class="contents clearfix"> <div class="main"> <p>メインコンテンツ</p> <p>メインコンテンツ</p> <p>メインコンテンツ</p> </div> <div class="nav-wrapper"> <div class="nav"> <p>ナビゲーション</p> <p>ナビゲーション</p> <p>ナビゲーション</p> <p>ナビゲーション</p> <p>ナビゲーション</p> </div> </div> </div> </div>
CSS
.header { height: 50px; background: #999999; } .contents { width: 960px; margin: 0 auto; } .main { float: left; width: 740px; height: 1500px; background: #cccccc; } .nav-wrapper { /* .navの領域確保用 */ float: right; width: 200px; } .nav { top: 0; width: 200px; background: #cccccc; } .nav.is-fixed { position: fixed; }
JavaScriptは先ほどと同じため、省略します。
サイドナビ追従のデモページ
コメントが承認されるまで時間がかかります。