我正在使用Bootstrap,其全局导航栏固定在页面主体的顶部。
<div class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/">MyBrand</a>
<div class="nav-collapse collapse">
<ul class="nav">
<li><a href="#>Page 1</li>
<li><a href="#>Page 2</li>
<li><a href="#>Page 3</li>
</ul>
</div>
</div>
</div>
</div>
我在正文顶部添加了40px的边距,以便页面内容的顶部不会被导航栏覆盖。
body {
background-color: #f5f5f5;
position: relative;
margin-top: 40px;
}
到那里,一切正常。我还使用内部锚点来简化页面内部的导航,使用Twitter与Bootstrap文档中的词缀组件一起使用的相同机制,使用户能够跳转到页面中的不同部分(参见{{3}) })
<a href="#section1">Section 1</a>
<a href="#section2">Section 2</a>
<a href="#section3">Section 3</a>
[...]
<section id="section1">
[...]
[...]
[...]
</section
<section id="section2">
[...]
[...]
[...]
</section
<section id="section3">
[...]
[...]
[...]
</section>
我的问题是当用户点击时,浏览器将目标粘贴到屏幕的最顶部,内容在导航栏下消失。我注意到Twitter使用了一个技巧,目标<section>
标签包含“填充顶部:30px;”,最接近的<h1>
包括“margin-top:10px;” CSS指令,以便将文本显示在屏幕顶部正下方40px处。
我不能让我在每个部分之间“丢失”40px,我的显示器必须保持紧凑。我的问题是:有没有办法让内部锚点不要粘在屏幕顶部的顶部,而是要保持远离屏幕顶部的任意长度?
答案 0 :(得分:15)
最后,我想出了如何轻松解决这个问题:
body {
background-color: #f5f5f5;
position: relative;
margin-top: 40px;
}
section {
padding-top:40px;
margin-top:-40px;
}
这意味着在主体顶部添加了40px的边距,在截面的顶部添加了40px的填充,还添加了负40px的边距以便向上移动各自的预期位置,引入了无形的边距。当浏览器在单击锚点后将显示绘制到某个部分时的帐户。
希望得到这个帮助。
答案 1 :(得分:5)
要让它滚动到正确的位置并在滚动页面时让所选菜单项正确,您需要在锚点上设置padding-top: 40px;
,并在之前的兄弟上设置margin-bottom: -40px;
锚。
您可以使用JS片段实现此目的,该片段将从导航菜单中找到元素并应用样式更改。
$("header .nav a[href!=#]").each(function(){
$($(this).attr("href")).css("padding-top", "40px").prev().css("margin-bottom", "-40px");
});
答案 2 :(得分:2)
如果您的应用程序可以应用javascript,则以下javascript也可以正常运行:
function maybeScrollToHash() {
if (window.location.hash && $(window.location.hash).length) {
var newTop = $(window.location.hash).offset().top - $('.navbar-fixed-top').height() + parseInt($('body').css('padding-top'),10);
$(window).scrollTop(newTop);
}
}
$(window).bind('hashchange', function() {
maybeScrollToHash();
});
maybeScrollToHash();
这是对此处的答案的略微修改:https://github.com/twbs/bootstrap/issues/193
唯一的区别是上面的代码适用于 navbar-fixed-top 类。