我想设置菜单栏Like THIS的样式。 当您向下滚动时,它固定在站点的顶部,并且在页面加载时它不是固定的位置。
如何用CSS完成?
答案 0 :(得分:7)
您所追求的是“粘性导航栏/菜单”。
最简单的方法是将以下CSS添加到菜单/导航栏
position:fixed;
top:0px;
也就是说,为了使效果更接近你发布的效果,你可能会想要使用一些jQuery,例如:
$(window).bind('scroll', function() {
if ($(window).scrollTop() > 50) {
$('.menu').addClass('fixed');
}
else {
$('.menu').removeClass('fixed');
}
});
通过将CSS类“固定”添加到.menu
元素(固定类),滚动经过某个点(例如50px)后,将菜单栏“修复”到页面顶部只会是例如上面的CSS。
列出了一些很好的例子here。
答案 1 :(得分:2)
来源: Creating a sticky nav css and jquery
<强> HTML 强>
<div id="menu">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Blog</a></li>
<li><a href="#">Shop</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
<div id="content">
This is some content 0<br/>
This is some content 1<br/>
This is some content 2<br/>
This is some content 3<br/>
This is some content 4<br/>
This is some content 5<br/>
This is some content 6<br/>
This is some content 7<br/>
This is some content 8<br/>
<div id="data" />
</div>
<强> CSS 强>
* {
font-family: Consolas,Sans-serif;
font-size: 10pt;
}
#menu {
position: absolute;
width: 100%;
}
#menu.out {
position: fixed;
}
#menu ul {
margin: 0;
padding: 1em .5em;
list-style: none;
background-color: #fc9;
}
#menu ul li {
display: inline-block;
}
#menu ul li a {
padding: 5px .5em;
}
#content {
background-color: #ebebee;
padding: 4em 1em 1em;
height: 900px;
}
<强> JQuery的:强>
var menu = $("#menu");
var ul = menu.find("ul");
var content = $("#content")[0];
var data = $("#data");
var menuHeight = menu[0].getBoundingClientRect().bottom;
var inView= true;
$(document).scroll(function(evt) {
evt.preventDefault();
var top = content.getBoundingClientRect().top;
var nextInView = top+menuHeight > 0;
if (inView ^ nextInView)
{
data.append("<div>Switching.</div>")
inView = nextInView;
if (inView)
{
menu.removeClass("out");
}
else
{
menu.addClass("out");
ul.hide().slideDown("fast");
}
}
});
小提琴:Demo
希望这有帮助
快乐编码