如何强制 Bootstrap 导航栏固定到顶部 下推(滑动)元素 [英] How to Force Bootstrap Navbar Fix To Top Push Down(slide) Elements Under

查看:23
本文介绍了如何强制 Bootstrap 导航栏固定到顶部 下推(滑动)元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如您在 此演示 中所见,Bootstrap 3 Navbar Fixed to Top 与常规导航栏不同向下滑动小屏幕中导航栏后面的元素.相反,它将导航栏覆盖在内容元素之上.现在你能告诉我是否有办法强制修复导航栏也像常规导航栏一样在滑动时上下推动内容吗?

谢谢

解决方案

好的,所以你可以让它做你想做的事,但让我告诉你为什么这样做真的是个坏主意,因为 最后它只是毫无意义.

以下答案将使用下面的代码段作为参考.您可能需要全屏查看,这意味着您可能还需要调整浏览器窗口的宽度以显示折叠的导航.

$(function() {$('button.navbar-toggle').click(function() {var value = $('body').css('padding-top');如果(值 === '70px'){$('body').css('padding-top', '+=235');} 别的 {$('body').css('padding-top', '70');}});});

body {填充顶部:70px;}

<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="样式表"/><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script><script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script><nav class="navbar navbar-inverse navbar-fixed-top" role="navigation"><div class="容器"><!-- 品牌和切换被分组以获得更好的移动显示--><div class="navbar-header"><button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"><span class="sr-only">切换导航</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span><a class="navbar-brand" href="#">Brand</a>

<!-- 收集导航链接、表单和其他用于切换的内容--><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav"><li class="active"><a href="#">Link <span class="sr-only">(current)</span></a><li><a href="#">链接</a>

  • <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Dropdown <span class="caret"></跨度</a><ul class="dropdown-menu" role="menu"><li><a href="#">动作</a>
  • <li><a href="#">另一个动作</a><li><a href="#">这里还有别的东西</a><li class="divider"></li><li><a href="#">分隔链接</a><li class="divider"></li><li><a href="#">一个单独的链接</a><ul class="nav navbar-nav navbar-right"><li><a href="#">链接</a>
  • <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Dropdown <span class="caret"></跨度</a><ul class="dropdown-menu" role="menu"><li><a href="#">动作</a>
  • <li><a href="#">另一个动作</a><li><a href="#">这里还有别的东西</a><li class="divider"></li><li><a href="#">分隔链接</a>

    <!--/.navbar-collapse -->

    <!--/.container-fluid --></nav><div class="容器"><div class="panel panel-default"><div class="panel-heading">没有标题的面板标题</div><div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading">没有标题的面板标题</div><div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading">没有标题的面板标题</div><div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    <div class="panel panel-default"><div class="panel-heading"><h3 class="panel-title">面板标题</h3>

    <div class="panel-body">面板内容

    顶部的 jQuery 位用于调整 body 元素的 'padding-top' 值.

    最初,根据关于固定导航栏的官方 Bootstrap 文档,您必须将 70px 的 padding-top 添加到页面的 body 标记中,这样导航栏就不会与页面内容重叠.因此,要使页面内容在您位于页面顶部时向下移动,您必须根据导航调整此填充.

    但这就是事情开始变得毫无意义的地方.

    当您位于页面内容的最顶部时,它会被向下推,看起来还不错,类似于普通的 Bootstrap 导航栏:

    但是,向下滚动大约一半,以便您的正文内容现在位于导航栏下方,然后再次展开导航.内容确实对用户没有任何用处.

    固定导航栏适用于当您希望导航始终可见时,无论您在何处滚动页面,这意味着在移动网站上,它必须在展开时悬停在页面内容上.鉴于此,当您在移动视图中展开固定的 Bootstrap 导航栏时,将页面的正文内容向下推真的毫无意义.

    如果您或其他任何人真的需要某种解决方案,我已经提供了一个答案,也许是因为经理或客户坚持拥有这种类型的功能,但我只是想指出它实际上是多么没有意义,这样您也可以向他们解释,可能需要您自担风险.:P

    As you can see at This Demo Bootstrap 3 Navbar Fixed to Top is not behaving like regular navbras on sliding down elements which are after the navbar in small screens. Instead it is overlaying the navbar on top of content elements. Now can you please let me know if there is a way to force fix navbar also acts like regular navbars on pushing the content down and up on sliding?

    Thanks

    解决方案

    Alright, so you can kind of get it to do what you want, but allow me to show you why doing this is honestly a bad idea because in the end it's just pointless.

    The following answer will use the snippet bellow for refference. You may need to view it full screen which means you may also need to adjust he width of your browser window to get the collapsed nav to show up.

    $(function() {
      $('button.navbar-toggle').click(function() {
        var value = $('body').css('padding-top');
        if (value === '70px') {
          $('body').css('padding-top', '+=235');
        } else {
          $('body').css('padding-top', '70');
        }
      });
    });

    body {
      padding-top: 70px;
    }

    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
    
    <nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
      <div class="container">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
            <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="#">Brand</a>
        </div>
    
        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a>
            </li>
            <li><a href="#">Link</a>
            </li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Dropdown <span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="#">Action</a>
                </li>
                <li><a href="#">Another action</a>
                </li>
                <li><a href="#">Something else here</a>
                </li>
                <li class="divider"></li>
                <li><a href="#">Separated link</a>
                </li>
                <li class="divider"></li>
                <li><a href="#">One more separated link</a>
                </li>
              </ul>
            </li>
          </ul>
    
          <ul class="nav navbar-nav navbar-right">
            <li><a href="#">Link</a>
            </li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Dropdown <span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="#">Action</a>
                </li>
                <li><a href="#">Another action</a>
                </li>
                <li><a href="#">Something else here</a>
                </li>
                <li class="divider"></li>
                <li><a href="#">Separated link</a>
                </li>
              </ul>
            </li>
          </ul>
        </div>
        <!-- /.navbar-collapse -->
      </div>
      <!-- /.container-fluid -->
    </nav>
    <div class="container">
      <div class="panel panel-default">
        <div class="panel-heading">Panel heading without title</div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
    
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading">Panel heading without title</div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
    
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading">Panel heading without title</div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
    
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
      <div class="panel panel-default">
        <div class="panel-heading">
          <h3 class="panel-title">Panel title</h3>
        </div>
        <div class="panel-body">
          Panel content
        </div>
      </div>
    
    </div>

    The bit of jQuery at the top is what you can use to adjust the 'padding-top' value of your body element.

    Initially, per the official Bootstrap documentation regarding fixed navbars, you have to add a padding-top of 70px to your page's body tag, so the navbar doesn't overlap the page content. As such, to get the page content to move down when you're at the top of the page you have to adjust this padding to fit based on your nav.

    But this is where things start to get a little pointless.

    When you're at the very top of your page content, it gets pushed down and looks kind of okay, similar to the normal Bootstrap navbar:

    However, scroll down about halfway so your body content is now under your navbar and expand the nav again. You get this slight little jump with the content which really doesn't do anything useful for the user.

    The fixed navbar is for when you want your nav to always be visible no matter where you are in scrolling your page, which means on mobile sites it has to hover over the content of your page when expanded. Given this, having the body content of your page pushed down when you expand a fixed Bootstrap navbar in mobile view is really quite pointless.

    I've provided an answer in case you or anyone else really needs some kind of solution, maybe due to a manager or client that insists on having this type of functionality, but I simply wanted to point out how pointless it really is, that way you might explain it to them as well, possibly at your own risk. :P

    这篇关于如何强制 Bootstrap 导航栏固定到顶部 下推(滑动)元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    相关文章
    其他开发最新文章
    热门教程
    热门工具
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆