【この記事を読むのに必要な時間は約 5 分です】
サイトの利便性を向上させるためのメニューを常に画面上の同じ位置に表示させておきたい場合、 CSS または javaScript を用いて表示位置を固定させることができます。
CSSでメニューの表示位置を固定する
基本的なパターンから。CSS のみを用いて、画面の初期表示時に画面上部に表示されているメニューを同じ位置に固定表示させます。
スクロールしてもメニューは画面上部に表示されたまま、位置が変わりません。
上記サイトの固定メニュー表示部分は以下のようなコードになります(抜粋)。position: fixed を指定することで flybar 要素を特定の位置に固定表示しています。
※ position: fixed は IE6 以前では未対応のため、動作しません。
html
<div id="flybar"> <a id="logo" href="#top"><img src="/documentation/images/logo.png" width="225" height="39" alt="CoffeeScript" /></a> </div>
CSS
#flybar { position: fixed; z-index: 100; height: 50px; min-width: 490px; left: 40px; right: 40px; top: 25px; padding-left: 252px; background: #eee; border: 1px solid #aaa; border-top: 1px solid #bbb; border-bottom: 1px solid #888; } #logo { display: block; outline: none; position: absolute; top: 0px; left: 10px; } #logo img { margin: 5px 0 0 3px; }
参考
jQueryで一定以上スクロールされたときメニューを固定する
画面の右側にメニュー(サイドバー)を表示している場合、画面下にスクロールしていくとコンテンツの長さによってメニューが表示されなくなることがあります。下にスクロールしていくとメニュー部分にはただの白い余白が・・・というのは UI 的に優しくありません。広告を表示しているサイトではクリック機会の損失にもなります。 以下はメニューの表示位置よりも下にスクロールされた場合、メニューを固定表示に切り替える実装例です。
CSS
.fixed{ position: fixed; top: 0px; left: 0px z-index: 9999; }
Javascript
$(function(){ var box = $('#fixedbox'); var boxTop = box.offset().top; $(window).scroll(function () { if($(window).scrollTop() >= boxTop - 30) { box.addClass('fixed'); } else { box.removeClass('fixed'); } }); });
スクロールの位置 ( scrollTop() ) がメニューの位置 ( offset().top ) よりも下に移動したとき、 fixedbox 要素に fixed クラスを追加することで、メニューに position:fixed が適用され、画面の最上部に固定表示されます。
scrollTop、 offset().top はともに jQuery の関数で、座標位置を取得することができます。なお、左端からの位置は scrollLeft、 offset().left で取得することができるため、左右にスクロールさせる画面においても要素を固定表示させることができます。