How to change navbar collapse threshold using Twitter bootstrap

I'm using Twitter Bootstrap 2.0.1 in a Rails 3.1.2 project, implemented with bootstrap-sass. I'm loading both the bootstrap.css and the bootstrap-responsive.css files, as well as the bootstrap-collapse.js Javascript.

I have a fluid layout with a navbar similar to the example. This follows the navbar "responsive variation" instructions here. It works fine: if the page is narrower than about 940px, the navbar collapses and displays a "button" that I can click on to expand.

However my navbar looks good down to about 550px wide, ie it doesn't need to be collapsed unless the screen is very narrow.

How do I tell Bootstrap to only collapse the navbar if the screen is less than 550px wide?

Note that at this point I do not want to modify the other responsive behaviors, eg stacking elements instead of displaying them side by side.


You are looking for line 239 of bootstrap-responsive.css

@media (max-width: 979px) {...}

Where the max-width value triggers the responsive nav. Change it to 550px or so and it should resize fine.


Bootstrap > 2.1 && < 3

  • Use the less version of bootstrap
  • Change the @navbarCollapseWidth variable in variables.less
  • Recompile.
  • Update 2013: The easy way

  • Visit http://getbootstrap.com/customize/#less-variables
  • Change @navbarCollapseWidth in the formfield
  • Click "Compile and Download".
  • (THX to Archonic via comment)

    Update 2014: Bootstrap 3.1.1 and 3.2 (they even added it to the documentation)

    If you're customizing or overriding/editing .less variables, you're looking for:

    //** Point at which the navbar becomes uncollapsed.
    @grid-float-breakpoint:     @screen-sm-min;
    //** Point at which the navbar begins collapsing.
    @grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
    

    You can establish a new @media query to drop the navbar elements down as you see fit, all you have to do is reset the former to accommodate your new query with the desired drop width. Take this for example:

    CSS

    /** Modified Responsive CSS **/
    
    @media (max-width: 979px) {
        .btn-navbar {
            display: none;
        }
        .navbar .nav-collapse {
            clear: none;
        }
    
        .nav-collapse {
            height: auto;
            overflow: auto;
        }
    
        .navbar .nav {
            float: left;
            margin: 0 10px 0 0;
        }
    
        .navbar .brand {
            margin-left: -20px;
            padding: 8px 20px 12px;
        }
    
        .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
            display: block;
        }
    
        .navbar .nav > li > a, .navbar .dropdown-menu a {
            border-radius: 0;
            color: #999999;
            font-weight: normal;
            padding: 10px 10px 11px;
        }
    
        .navbar .nav > li {
            float: left;
        }
    
        .navbar .dropdown-menu {
            background-clip: padding-box;
            background-color: #FFFFFF;
            border-color: rgba(0, 0, 0, 0.2);
            border-radius: 0 0 5px 5px;
            border-style: solid;
            border-width: 1px;
            box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
            display: none;
            float: left;
            left: 0;
            list-style: none outside none;
            margin: 0;
            min-width: 160px;
            padding: 4px 0;
            position: absolute;
            top: 100%;
            z-index: 1000;
        }
    
        .navbar-form, .navbar-search {
            border:none;
            box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.1);
            float: left;
            margin-bottom: 0;
            margin-top:6px;
            padding: 9px 15px;
        }
    
        .navbar .nav.pull-right {
            float: right;
            margin-left: auto;
        }
    }
    
    @media (max-width: 550px) {
        .btn-navbar {
            display: block;
        }
        .navbar .nav-collapse {
            clear: left;
        }
    
        .nav-collapse {
            height: 0;
            overflow: hidden;
        }
    
        .navbar .nav {
            float: none;
            margin: 0 0 9px;
        }
    
        .navbar .brand {
            margin: 0 0 0 -5px;
            padding-left: 10px;
            padding-right: 10px;
        }
    
        .navbar .dropdown-menu:before, .navbar .dropdown-menu:after {
            display: none;
        }
    
        .navbar .nav > li > a, .navbar .dropdown-menu a {
            border-radius: 3px 3px 3px 3px;
            color: #999999;
            font-weight: bold;
            padding: 6px 15px;
        }
    
        .navbar .nav > li {
            float: none;
        }
    
        .navbar .dropdown-menu {
            background-color: transparent;
            border: medium none;
            border-radius: 0 0 0 0;
            box-shadow: none;
            display: block;
            float: none;
            left: auto;
            margin: 0 15px;
            max-width: none;
            padding: 0;
            position: static;
            top: auto;
        }
    
        .navbar-form, .navbar-search {
            border-bottom: 1px solid #222222;
            border-top: 1px solid #222222;
            box-shadow: 0 1px 0 rgba(255, 255, 255, 0.1) inset, 0 1px 0 rgba(255, 255, 255, 0.1);
            float: none;
            margin: 9px 0;
            padding: 9px 15px;
        }
    
        .navbar .nav.pull-right {
            float: none;
            margin-left: 0;
        }
    
    }
    

    In the following code you can see how I included the original @media query that handles the drop before the 979px mark and the new query to support your desired drop point of 550px . I modified the original query straight from the bootstrap-responsive css to reset all the styles applied to that specific query for the navbar elements and ported them to the new query that carries the drop point you need instead. This way we can commute all the styles from the original query down to the new query without messing around in the bootstrap-responsive stylesheet, this way the default values will still apply to the other elements in your document.

    Here is a short demo with a media query set to drop at 550px as you require: http://jsfiddle.net/wU8MW/

    Note: I placed the above modified @media queries way down below the css frame as the new modified css is supposed to be loaded first than the responsive css.

    链接地址: http://www.djcxy.com/p/89454.html

    上一篇: 更改默认的响应式导航栏断点

    下一篇: 如何使用Twitter引导更改导航栏折叠阈值