Bootstrap 3 Navbar Collapse

时间:2013-08-12 16:29:22

标签: twitter-bootstrap twitter-bootstrap-3 navbar

有没有办法增加bootstrap 3导航栏崩溃的程度(即让它折叠成纵向平板电脑上的下拉菜单)?

这两个适用于bootstrap 2但现在不适用!

How to change navbar collapse threshold using Twitter bootstrap-responsive?

Change the default responsive navbar breakpoint

12 个答案:

答案 0 :(得分:332)

我今天遇到了同样的问题。

Bootstrap 4

这是一个原生功能:https://getbootstrap.com/docs/4.0/components/navbar/#responsive-behaviors

您必须使用.navbar-expand{-sm|-md|-lg|-xl}类:

<nav class="navbar navbar-expand-md navbar-light bg-light">

Bootstrap 3

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

只需将991px更改为1199px md尺寸。

Demo

答案 1 :(得分:142)

Bootstrap 2和Bootstrap 3之间的最大区别在于Bootstrap 3是“移动优先”。

这意味着默认样式是为移动设备而设计的,对于Navbars,这意味着它默认为“折叠”,并在达到某个最小尺寸时“展开”。

Bootstrap 3的网站实际上有一个关于做什么的“提示”: http://getbootstrap.com/components/#navbar

  

自定义折叠点

     

根据导航栏中的内容,您可能需要更改导航栏在折叠模式和水平模式之间切换的点。自定义@ grid-float-breakpoint变量或添加自己的媒体查询。

如果你要重新编译你的LESS,你会在variables.less文件中找到所提到的LESS变量。它目前设置为“扩展”@media (min-width: 768px),这是一个“小屏幕”(即平板电脑),由Bootstrap 3术语。

@grid-float-breakpoint: @screen-tablet;

如果你想让折叠时间稍长一些,你可以调整它:

@grid-float-breakpoint: @screen-desktop;(992px断点)

或尽快扩展

@grid-float-breakpoint: @screen-phone(480px断点)

如果您希望稍后进行扩展,而不是重新编译LESS,则必须覆盖在768px媒体查询中应用的样式并让它们返回到先前的值。然后在适当的时候重新添加它们。

我不确定是否有更好的方法。根据您的需要重新编译Bootstrap LESS是最好的(最简单的)方式。否则,您必须找到影响Navbar的所有CSS媒体查询,将它们覆盖为768px宽度的默认样式,然后以更高的最小宽度将其恢复。

只需更改变量,重新编译LESS即可为您完成所有魔力。这是LESS / SASS预编译器的重点。 =)

(注意,我确实看到了它们,大约有100行代码,这对我来说很烦人,只是为了给定项目重新编译Bootstrap并避免意外搞乱)

我希望有所帮助!

干杯!

答案 2 :(得分:34)

Easiest way is to customize bootstrap

找到变量:

 @grid-float-breakpoint

设置为@ screen-sm,您可以根据需要进行更改。 希望它有所帮助!

答案 3 :(得分:20)

这些是在变量中控制的,不需要在源代码中捣乱。使用bootstrap,首先尝试变量,然后覆盖。然后回去再次尝试变量;)

我使用带有rails的bootstrap-sass,但它与默认的LESS一样。

FILE: main.css.scss
-------------------

// control the screen sizes
$screen-xs-min: 300px;
$screen-sm-min: 400px;
$screen-md-min: 800px;
$screen-lg-min: 1200px;

// this tells which screen size to use to start breaking on
// will tell navbar when to collapse
$grid-float-breakpoint: $screen-md-min;

// then import your bootstrap
@import "bootstrap";

就是这样!这个变量参考页面非常方便:https://github.com/twbs/bootstrap/blob/master/less/variables.less

答案 4 :(得分:9)

感谢Seb33300,我得到了这个工作。然而,似乎缺少一个重要的部分。至少在Bootstrap 3.1.1版中。

我的问题是导航栏以正确的宽度相应地折叠,但是菜单按钮不起作用。我无法展开和折叠菜单。

这是因为collapse.in类被.navbar-collapse.collapse中的!important所覆盖,并且可以通过添加“collapse.in”来解决。 Seb33300的例子在下面完成:

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

答案 5 :(得分:7)

我想对jmbertucci的回答进行投票和评论,但我还没有被控制信任。我有同样的问题并按照他的说法解决了。如果您使用的是Bootstrap 3.0,请在variables.less中编辑LESS变量。响应断点设置在第200行附近:

@screen-xs:                  480px;
@screen-phone:               @screen-xs;

// Small screen / tablet
@screen-sm:                  768px;
@screen-tablet:              @screen-sm;

// Medium screen / desktop
@screen-md:                  992px;
@screen-desktop:             @screen-md;

// Large screen / wide desktop
@screen-lg:                  1200px;
@screen-lg-desktop:          @screen-lg;

// So media queries don't overlap when required, provide a maximum
@screen-xs-max:              (@screen-sm - 1);
@screen-sm-max:              (@screen-md - 1);
@screen-md-max:              (@screen-lg - 1);

然后在约232行使用 @ grid-float-breakpoint 变量设置导航栏的折叠值。默认情况下,它设置为 @ screen-tablet 。如果你想要,你可以使用像素值,但我更喜欢使用LESS变量。

答案 6 :(得分:6)

如果您遇到的问题是菜单分为多行,您可以尝试以下方法之一:

1)尝试减少菜单项的数量或长度,例如删除菜单项或缩短单词。

2)减少菜单项之间的填充,如下所示:

.navbar .nav > li > a {
padding: 10px 15px 10px; /* Change here the second value for padding-left and padding right */
}

默认填充为两侧(左侧和右侧)15px。

如果您希望更改每个方面的使用:

padding-left: 7px; 
padding-right: 8px;

此设置也会影响下拉列表。

这并没有回答这个问题,但它可以帮助那些不想搞乱CSS或使用LESS变量的人。解决这个问题的两种常用方法。

答案 7 :(得分:3)

nabvar将在小型设备上崩溃。折叠点由变量中的@ grid-float-breakpoint定义。默认情况下,这将在768px之前。对于低于768像素屏幕宽度的屏幕,导航栏将如下所示:

enter image description here

可以在variables.less中更改@ grid-float-breakpoint并重新编译Bootstrap。执行此操作时,您还必须在navbar.less中更改@ screen-xs-max。您必须将此值设置为新的@ grid-float-breakpoint -1。另见:https://github.com/twbs/bootstrap/pull/10465。这需要将@ grid-float-breakpoint的导航栏形式和下拉列表更改为其移动版本。

答案 8 :(得分:3)

我担心自定义Bootstrap后面的维护和升级问题。我可以记录今天的自定义步骤,并希望从现在开始三年后升级Bootstrap的人将找到文档并重新应用这些步骤(可能会或可能不会在那时起作用)。我想,可以以任何一种方式进行论证,但我更喜欢在我的代码中保留任何自定义。

但是,我不太了解Seb33300的方法是如何工作的。它肯定不适用于Bootstrap 4.0.3。要使导航栏以1200而不是768展开,必须覆盖两个媒体查询的规则,以防止在768处扩展并在1200处强制扩展。

我有一个更长的菜单,可以在纵向模式下包裹在iPad上。 以下操作使菜单折叠到1200断点:

@media (min-width: 768px) {
    .navbar-header {
        float: none; }
    .navbar-toggle {
        display: block; }
    .navbar-fixed-top .navbar-collapse, 
    .navbar-static-top .navbar-collapse, 
    .navbar-fixed-bottom .navbar-collapse {
        padding-right: 15px;
        padding-left: 15px; }
    .navbar-collapse.collapse {
        display: none !important; }
        .navbar-collapse.collapse.in { 
        display: block!important; 
        margin-top: 0px; }
}
@media (min-width: 1200px) {
    .navbar-header {
        float: left; }
    .navbar-toggle {
    display: none; }
    .navbar-fixed-top .navbar-collapse, 
    .navbar-static-top .navbar-collapse, 
    .navbar-fixed-bottom .navbar-collapse {
        display: block !important; }
}

答案 9 :(得分:1)

我使用Bootstrap 3.0.0安装了CSS方式,因为我对LESS并不熟悉。这是我添加到我的自定义css文件(我在bootstrap.css之后加载)的代码,它允许我控制,因此菜单始终像accordion一样工作。
注意:我将整个navbar包含在一个div sidebar中,以区分我想要的行为,因此它不会影响我网站上的其他导航栏,例如主菜单。根据您的需求进行调整,希望它有所帮助。

/* Sidebar Menu Fix */

.sidebar .navbar-nav {
  margin: 7.5px -15px;
}
.sidebar .navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 20px;
}
.sidebar .navbar-collapse {
  max-height: 500px;
}
.sidebar .navbar-nav .open .dropdown-menu {
  position: static;
  float: none;
  width: auto;
  margin-top: 0;
  background-color: transparent;
  border: 0;
  box-shadow: none;
}
.sidebar .dropdown-menu > li > a {
  color: #777777;
}
.sidebar .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
.sidebar .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
  color: #333333;
  background-color: transparent;
}
.sidebar .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
.sidebar .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
.sidebar .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
  color: #555555;
  background-color: #e7e7e7;
}
.sidebar .navbar-nav {
  float: none;
}
.sidebar .navbar-nav > li {
  float: none;
}

附加说明:我还在主菜单navbar的切换中添加了更改(因为我网站上面的代码用于旁边的“子菜单”。

我改变了:

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">

成:

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse-topmenu">

然后还调整了:

<div class="navbar-collapse collapse navbar-collapse">

成:

<div class="navbar-collapse collapse navbar-collapse-topmenu">

如果你只有一个navbar,我想你不必担心这个问题,但在我的情况下它帮助了我。

答案 10 :(得分:0)

对于那些想要以比标准768px宽度更少折叠的人(以小于768px的宽度扩展),这是所需的css:

@media (min-width: 600px) {
.navbar-header {
        float: left;
}
.navbar-toggle {
    display: none;
}
.navbar-collapse {
    border-top: 0 none;
    box-shadow: none;
    width: auto;
}
.navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
}
.navbar-nav {
    float: left !important;
    margin: 0;
}
.navbar-nav>li {
    float: left;
}
.navbar-nav>li>a {
    padding-top: 15px;
    padding-bottom: 15px;
}
}

答案 11 :(得分:0)

我想我找到了一个简单的解决方案来改变崩溃断点,只能通过css。

我希望其他人可以证实,因为我没有彻底测试它,我不确定这个解决方案是否有副作用。

您必须更改以下类定义的媒体查询值:

@media (min-width: BREAKPOINT px ){
    .navbar-toggle{display:none}
}

@media (min-width: BREAKPOINT px){
    .navbar-collapse{
        width:auto;
        border-top:0;box-shadow:none
    }
    .navbar-collapse.collapse{
        display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important
    }
    .navbar-collapse.in{
        overflow-y:visible
   }
   .navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{
        padding-left:0;padding-right:0
    }
}

这对我目前的项目有用,但我仍需要更改一些css定义,以便为所有屏幕尺寸正确排列菜单。

希望这有帮助。