スティッキーヘッダーの作成【jQuery】

スティッキーヘッダー

画像1

様々なホームーページで見かけるヘッダーが上下に動いて、トップに固定されるやつです!!


code

##html

<header class="page-header" role="banner">
   <div class="inner">
       <h1 class="site-logo"><a href="./"><img src="./image/logo.png" alt="Shiftbrain" height="65" width="200"></a></h1>
       <nav class="primary-nav" role="navigation">
           <ul>
               <li><a href="./">About</a></li>
               <li><a href="./">Work</a></li>
               <li><a href="./">Blog</a></li>
               <li><a href="./">Recruit</a></li>
               <li><a href="./">Contact</a></li>
           </ul>
       </nav>
   </div>
</header>
##css

@charset "urf-8";

html { font-family: "ropa sans", sans-serif; font-size: 16px; line-height: 1.5;}
body { background-color: rgb(240, 240, 240); color: rgb(0, 0, 0); min-width: 960px; padding-top: 240px;}
h1, h2, h3, p, ul { margin: 0;}
ul  { padding-left: 0;}
ul li { list-style-type: none;}
a { color: inherit; text-decoration: none;}
img { vertical-align:  middle;}
.clearfix::before, .clearfix::after { content: ""; display: table; }
.clearfix::after { clear: both;}
.dummy { margin: 0 auto; max-width: 32em; padding: 2em 0;}


.page-header {
 background-color: rgb(255, 255, 255);
 position: absolute;
 width: 100%;
 min-width: 960px;
 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
         box-shadow: 0 1px 1px rgba(0, 0, 0, 0.25);
}

.page-header.sticky {
 position: fixed;
 top: 0;
}

.page-header .inner {
 margin: auto;
 width: 960px;
}

.no-boxshadow .page-header {
 border-bottom: 1px solid rgb(204, 204, 204);
}

/* logo */
.site-logo {
 float: left;
 margin-left: 50px;
}

/* nav */
.primary-nav {
 float: right;
 line-height: 65px;
 letter-spacing: 1px;
 text-transform: uppercase;
}

.primary-nav li {
 float: left;
}

.primary-nav a {
 display: block;
 padding: 0 1.36em;
}

.primary-nav a:hover {
 background-color: rgb(2400, 240, 240);
}

##js

$(function() {

 var $window = $(window),
     $header = $('.page-header'),
     headerOffsetTop = $header.offset().top;


 $window.on('scroll', function() {
   if ($window.scrollTop() > headerOffsetTop) {
     $header.addClass('sticky');
   } else {
     $header.removeClass('sticky');
   }
 });

 $window.trigger('scroll');

});


勉強になったこと

// scrollTop();
   指定した要素のスクロール位置の取得
   http://www.jquerystudy.info/reference/css/scrollTop.html

// offset();
    要素のドキュメント上での取得
 https://www.flatflag.nir87.com/offset-1167

// trigger();
    イベントを任意のタイミングで開始できる
 https://programmercollege.jp/column/11955/

各メソッドの説明については、参照したリンクに詳しく書いているので改めて説明はしません。


参考文献

jQuery 最高の教科書 株式会社シフトブレイン 著



いいなと思ったら応援しよう!