Bootstrap CSS将容器的一部分隐藏在导航栏下方navbar-fixed-top


127

我正在用Bootstrap构建一个项目,我面临的问题很少。我在Nav-top下有一个容器。我的问题是我的容器的某些部分隐藏在nav-top标头下方。我不想在其中使用top-margin容器。请在下面的HTML中看到即时通讯面临的问题

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<link rel="stylesheet" href="~/stylesheets/bootstrap.css"/>
<link rel="stylesheet" href="~/stylesheets/bootstrap-responsive.css"/>

</head>
<body>
    <div class="navbar navbar-fixed-top ">
        <div class="navbar-inner">
            <div class="container">
           <button data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar collapsed" type="button">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
                <div class="nav-collapse"><ul class="nav" id="navbar"><li ng-class="{active:section=='plunks'}" class="active"><a href="/plunks/trending"><i class="icon-home"></i>Home</a></li><li><a target="_self" href="/edit/"><i class="icon-calendar"></i>General Election 2014</a></li><li class="divider-vertical">
                    </li><li class="dropdown"><a class="dropdown-toggle" href="#" data-toggle="dropdown">
                        <i class="icon-eye-open">
                        </i>Assembly Elections
                        <b class="caret"></b>
                        </a>
                        <ul class="dropdown-menu">
                                <li><a href="#/HTML5Apps">Assembly Elections 2013</a></li>
                        </ul>
                         </li><li class="divider-vertical">
                    </li><li ng-class="{active:section=='tags'}"><a href="/tags"><i class="icon-th"></i>Constituecy</a></li><li ng-class="{active:section=='discuss'}"><a href="/discuss"><i class="icon-time"></i>Election News</a></li><li class="divider-vertical"></li><li><a href="https://github.com/filearts/plunker"><i class="icon-bell"></i>Candidate</a></li></ul></div>
             </div>
         </div>
    </div>
  <div  class="container" >
   <ul class="nav nav-pills">
    <li class="active">
    <a href="#">Popular</a>
    </li>
    <li><a href="#">Trending</a></li>
    <li><a href="#">Latest</a></li>
    </ul>
   </div>

    <script src="~/Scripts/jquery.js"></script>
    <script src="~/Scripts/bootstrap-dropdown.js"></script>
    <script src="~/Scripts/Collapse.js"></script>
</body>
</html>

从bootstrap文档中:固定到顶部添加.navbar-fixed-top并记住通过在<body>上添加至少40px的填充来说明其下方的隐藏区域。确保将其添加到核心Bootstrap CSS之后和可选的响应CSS之前。
cms_mgr

Answers:


215

这是通过将一些添加padding到的顶部来处理的<body>

根据Bootstrap上的文档.navbar-fixed-top尝试使用您自己的值或使用下面的代码段。提示:默认情况下,该navbar值为50px高。

  body {
    padding-top: 70px;
  }

另外,请查看此示例的源代码并打开starter-template.css


1
我在响应式CSS和普通CSS之间添加了60px的填充,效果很好
Ajay Beniwal 2013年

1
问题是..如果我通过customize链接自定义引导程序..那么我不会分别获得响应式CSS ...因此无法在两个声明之间“提供”此方法。另外,在我的正常和响应式CSS之间添加一些标签建议。是不是 必须有比这更好的解决方案。
VJ。

如果使用的是LESS,请使用引导程序变量@ navbar-height查找导航栏的高度。
洋基2015年

3
这更多的是解决方法,而不是解决方案:尽管这有助于页面顶部,但锚点等仍然无法使用。如果使用锚点滚动到子部分,则该子部分的标题将位于导航栏的后面。
mastov

1
为什么这一切从头开始发生?它刚开始在我身上发生,感觉好像茫茫人海,我仍然找不到开始它的原因。
泰勒·布朗

37

我想您遇到的问题与顶部固定导航栏的动态高度有关。例如,当用户登录时,您需要显示某种“ Hello [用户名] ”,并且当名称太宽时,导航栏需要使用更高的高度,因此该文本不会与导航栏菜单重叠。由于导航栏的样式为“ 位置:固定 ”,因此身体停留在其下方,并且其较高的部分被隐藏,因此每次导航栏高度发生变化时,您都需要“动态”更改顶部的填充,这将在下面发生案例场景:

  1. 该页面已加载/重新加载。
  2. 调整了浏览器窗口的大小,因为这可能会遇到不同的响应断点。
  3. 所述导航栏的内容被直接或间接地修饰,因为这可能会引发高度改变。

常规CSS并没有涵盖这种动态性,因此如果用户启用了JavaScript,我只能想到一种解决此问题的方法。请尝试使用以下jQuery代码片段来解决案例1和案例2;对于情况3,请记住在导航栏内容发生任何更改后调用onResize()函数:

var onResize = function() {
  // apply dynamic padding at the top of the body according to the fixed navbar height
  $("body").css("padding-top", $(".navbar-fixed-top").height());
};

// attach the function to the window resize event
$(window).resize(onResize);

// call it also when the page is ready after load or reload
$(function() {
  onResize();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>


这就是我想要的。通过存储窗口宽度并检查是否仅更改了垂直调整大小来对其进行优化。
Ripside

20

只需在固定导航栏之前定义一个空导航栏,它将创建所需的空间。

<nav class="navbar navbar-default ">
</nav>
<nav class="navbar  navbar-default navbar-fixed-top ">
     <div class="container-fluid">
// Your menu code 
     </div>
</nav>

8
这是一种令人讨厌的做事方式。
DotSlashCoding

关闭,但不考虑实际导航栏中的项目包装-除非您在此重复所有菜单。
Ripside

同意@DotSlashCoding,此方法不是良好的编码习惯(没有充分的理由失败的可维护性测试)。目前尚不清楚这笔额外费用的navbar用途。
fragilewindows

务实而酷。我也认为所有解决此问题的方法都是令人讨厌的。

8

发生这种情况的原因是,在navbar-fixed-top班级中,导航栏获取position:fixed。这又将导航栏从文档流中移出,使主体占据导航栏后面的空间。

您需要申请padding-topmargin-topcontainer,基于与价值观您的要求>= 50px。(或使用不同的值)

基本引导程序导航栏的高度大约为40px。因此,如果您提供一个padding-topmargin-top多个50px 或更多,您将始终在容器和导航栏之间留有呼吸空间


6

我也曾遇到过这个问题,但是没有脚本就只使用CSS就解决了。首先,按照Bootstrap网站上介绍的设置60px的步骤,按照固定菜单推荐的填充顶部进行操作。然后,我添加了三个媒体标签,这些标签在菜单也要调整大小的截止点处调整了填充的大小。

<style>      
    body{
        padding-top:60px;
    }
    /* fix padding under menu after resize */
    @media screen and (max-width: 767px) {
        body { padding-top: 60px; }
    }
    @media screen and (min-width:768px) and (max-width: 991px) {
        body { padding-top: 110px; }
    }
    @media screen and (min-width: 992px) {
        body { padding-top: 60px; }
    }
</style>

请注意,当我的菜单宽度在768到991之间时,布局中的菜单徽标加上<li>选项会导致菜单换行成两行。因此,我不得不调整padding-top以防止菜单覆盖内容,因此为110px。

希望这可以帮助...


6

我知道这个线程很旧,但是我只是遇到了这个问题,我只是通过page-header在导航下的页面中使用该类来解决它。我也用<nav>标签代替<div>但是我不确定它会表现出任何不同的行为。

page-header用作页面的容器<body>,仅当您不同意page-header给您的默认空间时,您才无需弄乱。

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>



   <div class="container-fluid">
        <nav class="navbar navbar-default navbar-fixed-top">
    
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#">Bootstrap</a>
            </div>
            <div id="navbar" class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">Home</a></li>
                    <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
                            <ul class="dropdown-menu">
                                <li><a href="#">Action</a></li>
                                <li><a href="#">Another action</a></li>
                                <li><a href="#">Something else here</a></li>
                                <li role="separator" class="divider"></li>
                                <li class="dropdown-header">Nav header</li>
                                <li><a href="#">Separated link</a></li>
                                <li><a href="#">One more separated link</a></li>
                            </ul>
                        </li>
                </ul>
                <div class="navbar-right">
                </div>
            </div>
        </nav>
    </div>
    <div class="page-header">
        <div class="clearfix">
            <div class="col-md-12">
                <div class="col-md-8 col-sm-6 col-xs-12">
                    <h1>Registration form <br /><small>A Bootstrap template showing a registration form with standard fields</small></h1>
                </div>
            </div>
        </div>
    </div>
        <div class="container">
        <div class="row">
            <form role="form">
                <div class="col-lg-6">
                    <div class="well well-sm"><strong><span class="glyphicon glyphicon-asterisk"></span>Required Field</strong></div>
                    <div class="form-group">
                        <label for="InputName">Enter Name</label>
                        <div class="input-group">
                            <input type="text" class="form-control" name="InputName" id="InputName" placeholder="Enter Name" required>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="InputEmail">Enter Email</label>
                        <div class="input-group">
                            <input type="email" class="form-control" id="InputEmailFirst" name="InputEmail" placeholder="Enter Email" required>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="InputEmail">Confirm Email</label>
                        <div class="input-group">
                            <input type="email" class="form-control" id="InputEmailSecond" name="InputEmail" placeholder="Confirm Email" required>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="InputMessage">Enter Message</label>
                        <div class="input-group">
                            <textarea name="InputMessage" id="InputMessage" class="form-control" rows="5" required></textarea>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-asterisk"></span></span>
                        </div>
                    </div>
                    <input type="submit" name="submit" id="submit" value="Submit" class="btn btn-info pull-right">
                </div>
            </form>
    </div>


3

我用jQuery解决了

<script type="text/javascript">
$(document).ready(function(e) {
   var h = $('nav').height() + 20;
   $('body').animate({ paddingTop: h });
});
</script>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.