【问题标题】:How to keep navigation bar collapsed on all screen sizes?如何在所有屏幕尺寸上保持导航栏折叠?
【发布时间】:2020-01-21 21:32:19
【问题描述】:

我在 SO 上尝试了这里建议的这两种不同的解决方案:

我还尝试了许多其他不同的解决方案,这些解决方案或多或少是相同的。没有一个对我有用。

如何让 Bootstrap 3 导航栏在所有屏幕尺寸(无论大小)上都处于折叠状态?

这是 HTML:

<nav class="navbar navbar-default navbar-custom">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
        <a class="navbar-brand" href="index.html">
             <img class="img-responsive imglogoheader" src="images/logo1.png">
        </a>
    </div>
    <div class="collapse navbar-collapse" id="myNavbar">
      <ul class="nav navbar-nav">
        <li class=""><a href="index.html">Home</a></li>
        <li><a href="profile.html">Profile</a></li>
         <li><a href="settings.html">Settings</a></li>
      <ul style="display:none !important;" class="nav navbar-nav navbar-right"></ul>
    </div>
  </div>
</nav> 

【问题讨论】:

  • 您是否尝试过此 SO 帖子中建议的解决方案:stackoverflow.com/questions/27092929/…>

标签: html css twitter-bootstrap twitter-bootstrap-3


【解决方案1】:

要使导航栏菜单在 Bootstrap 3 中的所有响应间隔上都可以切换,您需要这个 sn-p:

@media (min-width: 768px) {
  .navbar {
    .navbar-header,
    .navbar-nav>li {
      float: none;
    }
    .navbar-nav {
      float: none;
      margin: 7.5px -15px;
    }
    .navbar-toggle {
      display: block;
      margin-right: 0;
    }
    .navbar-collapse {
      border-top: 1px solid transparent;
      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
    }
    .navbar-collapse.collapse {
      display: none;
    }
    .navbar-nav>li>a {
      padding-top: 10px;
      padding-bottom: 10px;
    }
    .navbar-text {
      float: none;
      margin: 15px 0;
    }
    .navbar-collapse.collapse.in {
      display: block;
    }
    .collapsing {
      overflow: hidden;
    }
  }
}

请注意它是 SCSS。如果你想要它作为 CSS,你可以从答案末尾的演示中复制/粘贴它。

该解决方案主要改编自this answer,但我认为值得将其发布为一个干净的解决方案,而不是告诉您使用断点并清理它。 最重要的是,它不使用!important

请随时为原始答案投票。这是一个解决难题的特殊解决方案,特别是考虑到 Bootstrap 3 的导航栏折叠逻辑机制的复杂性(它是由 JavaScript 中的折叠插件完成的 - 这使得调试和/或逆向工程变得困难)。

看看它的工作原理:

@media (min-width: 768px) {
  .navbar .navbar-header,
  .navbar .navbar-nav>li {
    float: none;
  }
  .navbar .navbar-nav {
    float: none;
    margin: 7.5px -15px;
  }
  .navbar .navbar-toggle {
    display: block;
    margin-right: 0;
  }
  .navbar .navbar-collapse {
    border-top: 1px solid transparent;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  }
  .navbar .navbar-collapse.collapse {
    display: none;
  }
  .navbar .navbar-nav>li>a {
    padding-top: 10px;
    padding-bottom: 10px;
  }
  .navbar .navbar-text {
    float: none;
    margin: 15px 0;
  }
  .navbar .navbar-collapse.collapse.in {
    display: block;
  }
  .navbar .collapsing {
    overflow: hidden;
  }
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

<nav class="navbar navbar-default navbar-custom">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#myNavbar">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="index.html">
             Logo
        </a>
    </div>
    <div class="collapse .navbar-collapse" id="myNavbar">
      <ul class="nav navbar-nav">
        <li class=""><a href="index.html">Home</a></li>
        <li><a href="profile.html">Profile</a></li>
        <li><a href="settings.html">Settings</a></li>
      </ul>
    </div>
  </div>
</nav>

【讨论】:

  • 谢谢。我刚刚尝试过,但由于某种原因,我得到的行为是一个不断打开的导航栏,就好像我已经点击了它一样。在您的示例中,导航默认关闭,这是正常行为,但在我的应用程序中,导航已打开。我有任何意义吗?你知道为什么吗?
  • @SaturnConjuction,听起来你有自定义 CSS 导致它。显然,我不能不看就告诉你原因。我是人类 :) 找到一种方法来重现它,我可能会找到解决方法。
【解决方案2】:

tao 建议的答案为 60%,但对我来说并非如此。在这里,我分享最终为我做了什么。在我的 custom.css 中,我使用自定义规则覆盖引导程序

custom.css

@media (min-width: 768px) {
  .navbar .navbar-header,
  .navbar .navbar-nav>li {
    float: none;
  }
  .navbar .navbar-nav {
    float: none;
    margin: 7.5px -15px;
  }
  .navbar .navbar-toggle {
    display: block;
    margin-right: 0;
  }
  .navbar .navbar-collapse {
    border-top: 1px solid transparent;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  }
  .navbar .navbar-collapse.collapse {
    display: none;
  }
  .navbar .navbar-nav>li>a {
    padding-top: 10px;
    padding-bottom: 10px;
  }
  .navbar .navbar-text {
    float: none;
    margin: 15px 0;
  }
  .navbar .navbar-collapse.collapse.in {
    display: block;
  }
  .navbar .collapsing {
    overflow: hidden;
  }
}

我不得不在bootstrap.min.cs 中注释掉这一行,以使其正常工作:

  .navbar-collapse.collapse {
    /* display:block!important;*/
     height:auto!important;
     padding-bottom:0;
     overflow:visible!important
    }

【讨论】:

猜你喜欢
  • 2014-04-23
  • 2018-07-14
  • 2014-03-18
  • 1970-01-01
  • 2017-04-15
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多