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

时间:2012-04-26 15:06:57

标签: twitter-bootstrap

我有这个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>

但是当我查看页面的开头时,导航栏会阻止页面顶部附近的一些内容。如果在查看页面顶部时如何降低其余内容,以便导航栏不会阻止内容,那么是否有任何想法?

19 个答案:

答案 0 :(得分:357)

如果您使用自适应引导程序,那么添加这样的填充是不够的。在这种情况下,当您调整窗口大小时,您将在页面顶部和导航栏之间产生间隙。一个合适的解决方案如下:

body {
  padding-top: 60px;
}
@media (max-width: 979px) {
  body {
    padding-top: 0px;
  }
}

答案 1 :(得分:229)

添加到您的CSS:

body { 
    padding-top: 65px; 
}

来自Bootstrap docs

  

固定导航栏将覆盖您的其他内容,除非您在身体顶部添加填充。

答案 2 :(得分:138)

对于bootstrap 3,类navbar-static-top而不是navbar-fixed-top可以防止出现此问题,除非您需要始终显示导航栏。

答案 3 :(得分:58)

一个更方便的解决方案供您参考,它在我的所有项目中都很完美:

更改您的第一个&#39; div&#39;从

<div class='navbar navbar-fixed-top'>

<div class="navbar navbar-default navbar-static-top">

答案 4 :(得分:17)

我正在使用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);        
});

答案 5 :(得分:9)

我在真正的固定导航栏之前创建了一个虚拟的非固定导航栏,取得了很大的成功。

<nav class="navbar navbar-default"></nav> <!-- Dummy nav bar -->
<nav class="navbar navbar-default navbar-fixed-top"> <!-- Real nav bar -->
    <!-- Nav bar details -->
</nav>

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

答案 6 :(得分:7)

在我从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     身体 {       保证金:0;     }

答案 7 :(得分:5)

bootstrap v4 starter template css使用:

body {
  padding-top: 5rem;
}

答案 8 :(得分:4)

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

答案 9 :(得分:2)

navbar navbar-default 一切正常,但如果您使用 navbar-fixed-top ,则必须包含自定义样式正文{padding-top:60px;否则它会阻止下面的内容。

答案 10 :(得分:1)

使用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">

答案 11 :(得分:1)

使用percentage是比pixels更好的解决方案。

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

如果需要,您可以通过breakpoints

在另一个答案中添加不同的@spajus来明确说明

答案 12 :(得分:1)

这里会出现两个问题:

  1. 页面加载(隐藏内容)
  2. 此类内部链接将滚动到顶部,并被导航栏隐藏:
  3. <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! -->
    

    Bootstrap 4 w /内部页面链接

    要修复1),正如Martijn Burger上面所说,bootstrap v4启动模板css使用:

    body {
      padding-top: 5rem;
    }
    

    要修复2)请查看this issue。此代码主要有效(但不是第二次点击相同的哈希):

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

    此代码使用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);
        });
      })
    

答案 13 :(得分:0)

添加此内容:

.navbar {
  position: relative;
}

答案 14 :(得分:0)

到目前为止,我发现的不涉及硬编码高度和断点的最佳解决方案是在标记中添加一个额外的<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/似乎表明当屏幕阅读器处于对焦模式时这可能不起作用,这当然是您唯一的时间实际需要它来工作...

答案 15 :(得分:0)

<div class='navbar' data-spy="affix" data-offset-top="0">

如果您的导航栏最初位于页面顶部,请将值设置为0.否则,请将data-offset-top的值设置为导航栏上方内容的值。

同时,您需要修改css

.affix{
  width:100%;
  top:0;
  z-index: 10;
}

答案 16 :(得分:0)

你应该添加

 #page 
 { 
   padding-top: 65px
 }

不破坏粘性页脚或其他东西

答案 17 :(得分:-1)

添加到您的JS:

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

答案 18 :(得分:-2)

您可以根据屏幕分辨率设置保证金

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