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

后端 未结 14 967
别那么骄傲
别那么骄傲 2020-12-04 08:18

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-respon

相关标签:
14条回答
  • 2020-12-04 09:05

    I suspect (and hope) this will be implemented in an official way soon. In the meantime I'm just doing a simple css hack, using visible-phone on the dropdown button and visible-tablet on a second set of buttons I've placed in the navbar. So before it looked like this:

    <div class="navbar navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container-fluid">
          <a href="<%= root_url %>" class="brand brandtag"></a>
          <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </a>
          <div class="nav-collapse">
            <ul class="nav">
              <li>Navigation 1</li>
              <li>Navigation 2</li>
              <li>Navigation 3</li>
            </ul>
          </div>
        </div>
      </div>
    </div>
    

    And now it looks like:

    <div class="navbar navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container-fluid">
          <a href="<%= root_url %>" class="brand brandtag"></a>
          <a class="btn btn-navbar visible-phone" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </a>
          <div class="visible-tablet">
            <ul class="nav">
              <li>Navigation 1</li>
              <li>Navigation 2</li>
              <li>Navigation 3</li>
            </ul>
          </div>
          <div class="nav-collapse">
            <ul class="nav">
              <li>Navigation 1</li>
              <li>Navigation 2</li>
              <li>Navigation 3</li>
            </ul>
          </div>
        </div>
      </div>
    </div>
    

    Note that order of elements is important, otherwise you may have issues with elements going into the next line

    0 讨论(0)
  • 2020-12-04 09:07

    Bootstrap 3.x

    using SASS, you can change the value of $screen-sm to target your min size

    example: $screen-sm: 600px;

    You need to put this value in your application.scss file before the @import "bootstrap";

    $screen-sm:600px;
    @import "bootstrap";
    

    Less variables begin with "@" just changed them to "$" to override them before the import.

    Here is the list of variables.

    0 讨论(0)
  • 2020-12-04 09:08

    Taking tyler's hack even further by adding a visible-phone classed block and a hidden-phone class to an item in the main collapsible navigation, you can 'pull out' one or two of the collapsed items to display even in the phone navbar.

    <div class="navbar navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container-fluid">
          <a href="<%= root_url %>" class="brand brandtag"></a>
          <a class="btn btn-navbar visible-phone" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </a>
          <div class="visible-tablet">
            <ul class="nav">
              <li>Navigation 1</li>
              <li>Navigation 2</li>
              <li>Navigation 3</li>
            </ul>
          </div>
          <div class="visible-phone">
            <ul class="nav">
              <li>Navigation 1</li>
            </ul>
          </div>
          <div class="nav-collapse">
            <ul class="nav">
              <li class="hidden-phone">Navigation 1</li>
              <li>Navigation 2</li>
              <li>Navigation 3</li>
            </ul>
          </div>
        </div>
      </div>
    </div>
    
    0 讨论(0)
  • 2020-12-04 09:09

    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);
    
    0 讨论(0)
  • 2020-12-04 09:09

    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.

    0 讨论(0)
  • 2020-12-04 09:11

    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.

    0 讨论(0)
提交回复
热议问题