首页 文章

Bootstrap 4导航栏有两行,底行可折叠

提问于
浏览
0

我希望2个导航栏显示在两个单独的行中,所有链接(可折叠项目)位于底部,顶部和 Headers 和切换按钮位于顶行 .

像这样:

------------------------------------------------------
         ONE_________BIG_________TITLE        [Toggle]
------------------------------------------------------
Nav items Icon Links Forms ...
------------------------------------------------------

顶行将在移动和桌面设备中展开,但切换按钮应隐藏在桌面上 . 底行将在桌面上展开,并在移动设备上折叠 .

通过将所有内容包装在一个div.navbar中并使用display:table定位和垂直对齐徽标/ Headers 并相互切换,我能够在bootstrap 3中执行此操作 .

仅在桌面设备中,滚动后,我希望底行固定在顶部 . 我曾经在bootstrap 3中使用词缀来实现这一点,任何想法如何用新版本来做到这一点?

同样在移动设备中,未折叠的顶行应固定在顶部 .

这是我的bootstrap 3代码:

#navcollapse {
  top: 0;
  width: 100%;
  z-index: 10050;
}

@media (max-width: 767px) {
  #navcollapse {
    position: static;
  }
}

#topnavrow.affix {
  top: 0;
  width: 100%;
  z-index: 10050;
}

@media (min-width: 768px) {
  #topnavrow.affix {
    position: static;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<div class="navbar" data-offset-top="0" data-spy="affix" id="topnavrow">
  <div class="container" style="display:table;">
    <div style="display:table-cell;vertical-align:middle;">
      <a href="#" title="">
            _________TITLE_________
            </a>
    </div>
    <div style="display:table-cell;vertical-align:middle;">
      <button aria-expanded="false" class="navbar-toggle collapsed" data-target="#navcollapse" data-toggle="collapse" type="button">
              Toggle 
            </button>
    </div>
  </div>
  <nav class="collapse navbar-collapse container-fluid navbar-default" data-offset-top="100" data-spy="affix" id="navcollapse" style="max-width:100%;min-width:100%;">
    <div class="container">
      <ul class="nav navbar-nav">
        <li><a href="#">Item 1</a></li>
        <li><a href="#">Item 2</a></li>
        <li><a href="#">Item 3</a></li>
      </ul>
    </div>
  </nav>
</div>

这是@ZimSystem在评论中建议的代码 . 因为“navbar-collapse”和“collapse”应用于导航栏内的div,所以当导航栏折叠时总会出现灰色边框 .

我不知道如何在不破坏样式的情况下将其应用于父导航......

/* only affix the top navbar on mobile */
@media (max-width: 768px) {
    .fixed-top-sm {
        position: fixed;
        top: 0;
        right: 0;
        left: 0;
        z-index: 1030;
    }
    body {
        padding-top: 44px;
    }
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
   <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>


<nav class="navbar navbar-expand-md fixed-top-sm justify-content-start flex-nowrap bg-light navbar-light">
    <a href="/" class="navbar-brand">Top</a>
    <button class="navbar-toggler ml-auto" type="button" data-toggle="collapse" data-target="#navbar2">
        <span class="navbar-toggler-icon"></span>
    </button>
</nav>
<nav class="navbar navbar-expand-md bg-dark navbar-dark">
    <div class="navbar-collapse collapse pt-2 pt-md-0" id="navbar2">
        <ul class="navbar-nav">
            <li class=""><a class="nav-link" href="#">Link 2</a></li>
        </ul>
    </div>
</nav>

1 回答

  • 1

    以下示例是针对此问题的纯Bootstrap 4解决方案 .

    分解:

    • 我们正在使用两个 .navbar ,一个在另一个之下 . 在这种情况下,两者都具有相同的 .navbar-expand-{breakpoint} 类, .navbar-expand-lg .

    • Headers 位于.ml-auto .mr-auto类的中心位置 . 这使得切换按钮在右边缘完好无损 .

    • 为了在底部导航栏折叠时消除边框(由底部导航栏的填充引起),导航栏本身会引入 .py-0 ,并且 .my-2 会添加到 .navbar-collapse 以重新获得spacing .

    • 最后,将.sticky-top应用于两个导航栏 . 因此,当只有顶部导航栏可见时,它将保持固定在顶部,但是当底部导航栏也可见时,它将固定在顶部而不是顶部导航栏 .

    #content {
        height: 200vh;
    }
    
    <nav id="topnavrow" class="navbar navbar-expand-lg navbar-dark bg-dark sticky-top">
        <a class="navbar-brand ml-auto mr-auto" href="#">_________TITLE_________</a>
    
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navcollapse" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
    </nav>
    
    <nav class="navbar navbar-expand-lg navbar-light bg-light py-0 sticky-top">
        <div id="navcollapse" class="collapse navbar-collapse my-2">
            <div class="navbar-nav">
                <a class="nav-item nav-link active" href="#">Item 1</a>
                <a class="nav-item nav-link" href="#">Item 2</a>
                <a class="nav-item nav-link" href="#">Item 3</a>
                <a class="nav-item nav-link" href="#">Item 4</a>
            </div>
        </div>
    </nav>
    
    <section id="content">
        [page content]
    </section>
    
    
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
    

相关问题