Cooops の回答は優れたシンプルなソリューションですが、固定クラスを適用すると、ページが非常に短くなり、コンテンツが「ジャンプ」して、ページの長さがスクロール距離がヘッダーの高さよりも短い場合要素を使用すると、ジャンプするように見え、ページの下部が表示されなくなります。
私が見つけた答えは、固定される要素(私の場合はnav要素)の上にスペーサーdivを追加し、nav要素と同じ高さに設定し、何も表示しないように設定することでした。
.fixed クラスを nav に追加する場合は .nav-spacer div を表示し、削除する場合は非表示にします。ページの高さが瞬時に変わるため、期間を 0 に設定しました。
HTML
<header>the element above the element that will become fixed</header>
<div class="nav-spacer"></div>
<nav></nav>
CSS
nav {
position: relative;
height: 100px;
}
.nav-spacer{
position: relative;
height: 100px;
display: none;
}
.fixed {
position: fixed;
top:0;
left:0;
width: 100%;
/* I like to add a shadow on to the fixed element */
-webkit-box-shadow: 0px 5px 10px 1px rgba(0,0,0,0.25);
-moz-box-shadow: 0px 5px 10px 1px rgba(0,0,0,0.25);
box-shadow: 0px 5px 10px 1px rgba(0,0,0,0.25);
}
JavaScript
var stickyOffset = $('nav').offset().top;
$(window).scroll(function(){
if ($(window).scrollTop() >= stickyOffset){
$('nav').addClass('fixed');
//this makes the page length equal to what it was before fixing nav
$('.nav-spacer').show(0);
}
else {
$('nav').removeClass('fixed');
$('.nav-spacer').hide(0);
}
});