我有这个 Twitter 引导代码
<div class='navbar navbar-fixed-top'>
<div class='navbar-inner'>
<div class='container'>
<a class='btn btn-navbar' data-target='.nav-collapse' data-toggle='collapse'>
<span class='icon-bar'></span>
<span class='icon-bar'></span>
<span class='icon-bar'></span>
</a>
<div class='nav-collapse'>
<ul class='nav'>
<li class='active'>
<a href='some_url'>My Home</a>
</li>
<li>
<a href='some_url'>Option 1 </a>
</li>
<li>
<a href='some_url'>Another option</a>
</li>
<li>
<a href='some_url'>Another option</a>
</li>
</ul>
</div>
</div>
</div>
</div>
但是当我查看页面的开头时,导航栏挡住了页面顶部附近的一些内容。关于如何在查看页面顶部时将其余内容向下推以使内容不被导航栏阻挡的任何想法?
如果您使用的是响应式引导程序,那么添加这样的填充是不够的。在这种情况下,当您调整窗口大小时,页面顶部和导航栏之间会出现间隙。一个合适的解决方案如下所示:
body {
padding-top: 60px;
}
@media (max-width: 979px) {
body {
padding-top: 0px;
}
}
添加到您的 CSS:
body {
padding-top: 65px;
}
固定导航栏将覆盖您的其他内容,除非您在正文顶部添加填充。
对于引导程序 3,类 navbar-static-top
而不是 navbar-fixed-top
可以防止此问题,除非您需要导航栏始终可见。
一个更方便的解决方案供您参考,它在我的所有项目中都很完美:
将您的第一个“div”从
<div class='navbar navbar-fixed-top'>
至
<div class="navbar navbar-default navbar-static-top">
我正在使用 jQuery 来解决这个问题。这是 BS 3.0.0 的片段:
$(window).resize(function () {
$('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);
});
$(window).load(function () {
$('body').css('padding-top', parseInt($('#main-navbar').css("height"))+10);
});
在我从 MVC 5 tutorial 派生的项目中,我发现更改主体填充没有效果。以下对我有用:
@media screen and (min-width:768px) and (max-width:991px) {
body {
margin-top:100px;
}
}
@media screen and (min-width:992px) and (max-width:1199px) {
body {
margin-top:50px;
}
}
它解决了导航栏折叠成 2 或 3 行的情况。这可以插入到 bootstrap.css 行 body { margin: 0; 之后的任何位置。 }
在我真正的固定导航栏之前创建一个虚拟的非固定导航栏,我取得了很好的成功。
<nav class="navbar navbar-default"></nav> <!-- Dummy nav bar -->
<nav class="navbar navbar-default navbar-fixed-top"> <!-- Real nav bar -->
<!-- Nav bar details -->
</nav>
间距适用于所有屏幕尺寸。
正如 Twitter 的 this example 中所见,在包含响应式样式声明的行之前添加以下内容:
<style>
body {
padding-top: 60px;
}
</style>
像这样:
<link href="Z/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<style type="text/css">
body {
padding-top: 60px;
}
</style>
<link href="Z/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" />
使用 percentage
是比 pixels
更好的解决方案。
body {
padding-top: 10%; //This works regardless of display size.
}
如果需要,您仍然可以通过添加不同的 breakpoints
来明确,如 @spajus
的另一个答案中所述
使用 navbar navbar-default 一切正常,但如果您使用的是 navbar-fixed-top,则必须包含自定义样式 body { padding-top: 60px;} 否则它会阻止下面的内容。
这里会出现两个问题:
页面加载(内容隐藏) 像这样的内部链接将滚动到顶部,并被导航栏隐藏:
带有内部页面链接的 Bootstrap 4
要修复 1),正如 Martijn Burger 上面所说,bootstrap v4 starter 模板 css 使用:
body {
padding-top: 5rem;
}
要修复 2) 签出 this issue。这段代码大部分都有效(但不是在第二次点击相同的哈希时):
window.addEventListener("hashchange", function() { scrollBy(0, -70) })
此代码使用 jQuery(不是苗条的 jQuery)为 A 链接设置动画:
// inline theme global code here
$(document).ready(function() {
var body = $('html,body'), NAVBAR_HEIGHT = 70;
function smoothScrollingTo(target) {
if($(target)) body.animate({scrollTop:$(target).offset().top - NAVBAR_HEIGHT}, 500);
}
$('a[href*=\\#]').on('click', function(event){
event.preventDefault();
smoothScrollingTo(this.hash);
});
$(document).ready(function(){
smoothScrollingTo(location.hash);
});
})
到目前为止,我发现的不涉及硬编码高度和断点的最佳解决方案是在标记中添加一个额外的 <nav...
标记。
<nav class="navbar navbar-expand-md" aria-hidden="true">
<a class="navbar-brand" href="#">Navbar</a>
</nav>
<nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
<a class="navbar-brand" href="#">Navbar</a>
通过这种方式,@media
断点相同,高度相同(假设您的 navbar-brand
是 navbar
中最高的对象,但您可以轻松替换非 fixed-top
导航栏中的另一个元素。
失败的地方是屏幕阅读器,它现在将显示 2 个 navbar-brand
元素。这表明需要一个 not-for-sr
类来防止该元素显示给屏幕阅读器。但是该类不存在https://getbootstrap.com/docs/4.0/utilities/screenreaders/
我已尝试使用 aria-hidden="true"
来弥补屏幕阅读器问题,但 https://www.accessibility-developer-guide.com/examples/sensible-aria-usage/hidden/ 似乎表明当屏幕阅读器处于焦点模式时这可能不起作用,这当然是您真正需要它工作的唯一时间.. .
编辑:此解决方案不适用于较新版本的 Bootstrap,其中 navbar-inverse 和 navbar-static-top 类不可用。
使用 MVC 5,我修复我的方式,是简单地添加我自己的 Site.css,在其他人之后加载,使用以下行:body{padding: 0}
我将_Layout.cshtml开头的代码更改为:
<body>
<div class="navbar navbar-inverse navbar-static-top">
<div class="container">
@if (User.Identity.IsAuthenticated) {
<div class="top-navbar">
navbar-static-top
未在 Bootstrap4 中定义。 navbar-inverse
也不是
你应该添加
#page {
padding-top: 65px
}
不破坏粘性页脚或其他东西
<div class='navbar' data-spy="affix" data-offset-top="0">
如果您的导航栏最初位于页面顶部,请将值设置为 0。否则,请将 data-offset-top
的值设置为导航栏上方内容的值。
同时,您需要将 css
修改为:
.affix{
width:100%;
top:0;
z-index: 10;
}
添加这个:
.navbar {
position: relative;
}
您可以使用 .stick-top
,它可以在滚动时将导航栏固定到顶部,而无需添加任何 CSS 填充
<div class="container-fluid mt-3">
<nav class="navbar navbar-expand-sm bg-white navbar-light sticky-top pt-0">
<a class="navbar-brand" href="/">
<img src="/images/logo-full.png" alt="logo" width="150">
</a>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
</ul>
</nav>
<div class="row">
.....
</div>
</div>
添加到您的 JS:
jQuery(document).ready(function($) {
$("body").css({
'padding-top': $(".navbar").outerHeight() + 'px'
})
});
您可以根据屏幕分辨率设置边距
@media screen and (min-width:768px) and (max-width:991px) {
body {
margin-top:100px;
}
@media screen and (min-width:992px) and (max-width:1199px) {
body {
margin-top:50px;
}
}
body{
padding-top: 10%;
}
#nav{
position: fixed;
background-color: #8b0000;
width: 100%;
top:0;
}