顶部导航栏阻止页面的顶部内容



我有这个 Twitter Bootstrap 代码

  <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 教程派生的项目中,我发现更改正文填充没有任何效果。以下内容对我有用:

@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 行的情况。这可以插入到引导程序中.css行之后的任何位置 正文 { 边距: 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>

间距在所有屏幕尺寸上都很好。

引导 v4 入门模板 css 使用:

body {
  padding-top: 5rem;
}

如 Twitter 上的此示例所示,在包含响应式样式声明的行之前添加以下内容:

<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" />

使用 percentagepixels 更好的解决方案。

body {
  padding-top: 10%; //This works regardless of display size.
}

如果需要,您仍然可以通过添加不同的breakpoints来明确,如另一个答案中所述 @spajus

使用导航栏导航栏默认一切正常,但如果您使用的是导航栏固定顶部,则必须包含自定义样式正文 { padding-top: 60px;} 否则它将阻止下面的内容。

这里会发生两个问题:

  1. 页面加载(内容隐藏)
  2. 像这样的内部链接将滚动到顶部,并被导航栏隐藏:
<nav>...</nav>              <!-- 70 pixels tall -->
<a href="#hello">hello</a>  <!-- click to scroll down -->
<hr style="margin: 100px">
<h1 id="hello">World</h1>   <!-- Help!  I'm 70 pixels hidden! -->

引导 4 带内部页面链接

修复 1),正如 Martijn Burger 上面所说,引导 v4 入门模板 css 使用:

body {
  padding-top: 5rem;
}

要修复2)请查看此问题。 这段代码大部分有效(但不是在第二次点击相同哈希时):

window.addEventListener("hashchange", function() { scrollBy(0, -70) })

这段代码对 A 链接与 jQuery(不是纤薄的 jQuery)进行动画处理:

  // 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-brandnavbar中最高的对象,但您可以轻松地替换非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">
你应该

添加

#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;
}

添加到您的 JS:

jQuery(document).ready(function($) {
  $("body").css({
    'padding-top': $(".navbar").outerHeight() + 'px'
  })
});

添加以下内容:

.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>
您可以

根据屏幕分辨率设置边距

@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;
}

最新更新