HTML
HTMLの構造です。どこにでもあるシンプルなヘッダーって感じです。
今回はこのheader部分を固定します。
HTML
<header id="top-head"> <div class="inner"> <h1 class="logo">Fixed Navi</h1> <nav id="global-nav"> <ul> <li><a href="#">HOME</a></li> <li><a href="#">PRODUCT</a></li> <li><a href="#">WORKS</a></li> <li><a href="#">COMPANY</a></li> <li><a href="#">CONTACT</a></li> </ul> </nav> </div> </header>
jQuery
jQueryはスクロールすると header に fixed クラスを割り当てるだけです。
アニメーションはCSSで行います。
JavaScript
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> (function($) { $(function() { var $header = $('#top-head'); $(window).scroll(function() { if ($(window).scrollTop() > 50) { $header.addClass('fixed'); } else { $header.removeClass('fixed'); } }); }); })(jQuery); </script>
CSS
CSSはファーストビューのナビゲーションを普通に作って、jQueryで指定したクラス(fixed)で固定される狭いナビゲーションの2種類を作ります。
あとは変化のあるセレクタに transition を指定するだけです。
CSS
/* header *//* header */ #top-head { position: fixed; width: 100%; margin: 0 auto; padding: 30px 0 0; line-height: 1; } #top-head:after { content: ""; display: block; height: 1px; background: #fff; width: 980px; margin: 30px auto 0; } #top-head a, #top-head { color: #fff; text-decoration: none; } #top-head .inner { position: relative; } #top-head .logo { float: left; font-size: 32px; } #global-nav ul { list-style: none; position: absolute; right: 0; bottom: 0; font-size: 14px; } #global-nav ul li { float: left; position: relative; } #global-nav ul li a { padding: 0 30px; } /* transition */ #top-head, #top-head:after, #top-head .logo, #global-nav ul li, #global-nav ul li a { transition: all 0.3s ease; -webkit-transition: all 0.3s ease; -moz-transition: all 0.3s ease; -o-transition: all 0.3s ease; } /* Fixed */ #top-head.fixed { padding-top: 15px; background: rgba(255,255,255,.7); } #top-head.fixed .logo { font-size: 24px; color: #333; } #top-head.fixed:after { width: 100%; margin-top: 20px; } #top-head.fixed #global-nav ul li a { color: #333; padding: 0 20px; }