Coops 的回答是一个很好、简单的解决方案,但是,一旦应用了固定类,页面就会变得更短,并且内容会“跳”起来,并且如果页面的长度是滚动距离小于标题的高度元素,它会出现跳跃而不是让你看到页面底部。
我找到的答案是在将变为固定的元素(在我的情况下为导航元素)上方添加一个分隔符 div,并将其设置为与导航元素相同的高度,并将其设置为不显示。
将 .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);
}
});