【问题标题】:Bootstrap 4 navbar with two rows, bottom row collapsibleBootstrap 4 导航栏,两行,底行可折叠
【发布时间】:2018-07-06 15:07:37
【问题描述】:

我希望 2 个导航栏出现在两个单独的行中,所有链接(可折叠项)都在底部,而标题和切换按钮在顶行。

像这样:

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

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

我可以在 bootstrap 3 中做到这一点,方法是将所有内容包装在一个 div.navbar 中,并使用 display:table 来定位和垂直对齐徽标/标题,并在彼此旁边切换。

仅在桌面设备中,滚动后,我希望将底行固定到顶部。我曾经在 bootstrap 3 中使用词缀来实现这一点,有什么想法可以用新版本做到这一点吗?

此外,在移动设备中,未折叠的顶行应固定在顶部。

这是我的引导程序 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 在 cmets 中建议的代码。因为“navbar-collapse”和“collapse”应用于navbar内部的一个div,所以navbar折叠时总是有灰色边框。

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

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

【问题讨论】:

  • 要使其按照您在此处描述的方式单独使用本机 Bootstrap 4 类工作,导航栏链接必须在 HTML 中复制。这可以接受吗?
  • 为什么?顶行不一定是“导航栏”,但它仍然可以切换外部内容(底行,导航栏),我的问题是我无法让桌面的切换按钮消失,导航栏也没有折叠时完全隐藏,它会留下一个小边框,因为折叠应用于导航栏内的 div,而不是导航栏本身...
  • 使切换器消失不是问题。问题是你有一个非常非标准的设置,而 Bootstrap 4 不是为此而设计的。但我认为你应该在这里发布你当前的代码。 (这可能是有人已经投反对票的原因,您发布了一个没有您当前代码的问题,这对于此类问题是一个很大的禁忌)
  • 发布您到目前为止尝试过的代码。这个example may help.
  • 我在上面添加了我的 bootstrap 3 代码。我没有 bootstrap 4 的工作代码。

标签: jquery css twitter-bootstrap bootstrap-4 navbar


【解决方案1】:

下面的例子是这个问题的纯 Bootstrap 4 解决方案。

细分:

  • 我们使用两个.navbars,一个在另一个之下。两者都具有相同的 .navbar-expand-{breakpoint} 类,在本例中为 .navbar-expand-lg
  • 标题位于.ml-auto .mr-auto 类的中心。这样一来,右侧边缘的切换按钮就完好无损。
  • 为了消除底部navbar折叠时的边框(由底部navbar的paddings引起),在navbar本身引入.py-0,在.navbar-collapse中加入.my-2重新获得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>

【讨论】:

  • 完美!我猜你不再需要 jquery 了。我还想问“我在哪里可以找到这些短期课程的信息”,你已经回答了:)谢谢!!!
  • 我必须使用一个容器来使内容居中,但似乎以某种方式禁用了折叠。任何想法为什么?
  • 我不确定你如何使用.container,但对我来说,当我将两个导航栏包装到一个容器中时,它只会禁用像described here 这样的置顶功能。另一方面,当我将容器作为.navbars 的子级放置时,对我来说似乎没问题。这是Codepen
  • 行得通,谢谢!我想要更少的标签,所以我将它添加到 div#navcollapse 中,但它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2016-12-06
  • 2016-02-02
  • 2018-05-26
  • 2018-07-21
  • 1970-01-01
相关资源
最近更新 更多