Как изменить порог коллапса навигационной панели с помощью загрузчика Twitter? - PullRequest
94 голосов
/ 23 февраля 2012

Я использую Twitter Bootstrap 2.0.1 в проекте Rails 3.1.2, реализованном с помощью bootstrap-sass.Я загружаю файлы bootstrap.css и bootstrap-responsive.css, а также bootstrap-collapse.js Javascript.

У меня изменчивый макет с панелью навигации, похожей на пример .Это следует инструкциям "1008 * * здесь " навигационной панели.Он работает нормально: если страница уже примерно 940 пикселей, панель навигации сворачивается и отображает «кнопку», которую я могу нажать, чтобы развернуть ее.

Однако моя панель навигации выглядит хорошо до ширины около 550 пикселей, т.е.не нужно свернуть, если экран не очень узкий.

Как сказать Bootstrap свернуть панель навигации, только если ширина экрана меньше 550px?

Обратите внимание, что на этом этапе я не хочет изменить другие адаптивные поведения, например, наложение элементов вместо отображения их рядом.

Ответы [ 14 ]

73 голосов
/ 16 сентября 2012

Bootstrap> 2.1 && <3 </h2> Используйте меньшую версию начальной загрузки Измените переменную @navbarCollapseWidth в variables.less Recompile. Обновление 2013: простой способ Посетите http://getbootstrap.com/customize/#less-variables Измените @navbarCollapseWidth в поле формы Нажмите «Скомпилировать и загрузить». (THX в Archonic через комментарий) Обновление 2014: Bootstrap 3.1.1 и 3.2 (они даже добавил его в документацию ) Если вы настраиваете или переопределяете / редактируете .less переменных, вы ищете: //** 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);

41 голосов
/ 23 февраля 2012

Вы ищете строку 239 из bootstrap-responsive.css

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

, где значение max-width вызывает отзывчивую навигацию.Измените его на 550px или около того, и он должен нормально измениться.

11 голосов
/ 23 февраля 2012

Вы можете создать новый запрос @media, чтобы отбрасывать элементы панели навигации по своему усмотрению, все, что вам нужно сделать, это сбросить прежний, чтобы разместить новый запрос с желаемой шириной отбрасывания.Возьмем для примера:

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;
    }

}

В следующем коде вы можете увидеть, как я включил исходный запрос @media, который обрабатывает удаление перед 979px и новый запрос для поддержки желаемой точки отбрасывания 550px.Я изменил исходный запрос прямо из css, реагирующего на загрузку, чтобы сбросить все стили, примененные к этому конкретному запросу для элементов панели навигации, и перенес их в новый запрос, который содержит нужную вам точку отбрасывания.Таким образом, мы можем коммутировать все стили от исходного запроса до нового запроса, не вмешиваясь в загрузочную таблицу, реагирующую на загрузку, таким образом, значения по умолчанию все равно будут применяться к другим элементам в вашем документе.

Здесьэто короткая демонстрация с медиа-запросом, установленным на значение 550px, как вам требуется: http://jsfiddle.net/wU8MW/

Примечание: я поместил вышеупомянутые измененные @media запросы внизу ниже фрейма css как новый модифицированный cssдолжен быть загружен первым, чем отзывчивый CSS.

6 голосов
/ 10 ноября 2012

bootstrap-sass будет поддерживать переменную $ navbarCollapseWidth в следующей версии (2.2.1.0). Вы сможете обновить его, чтобы сделать именно то, что вы хотите, когда эта версия жива!

5 голосов
/ 03 ноября 2013

По состоянию на август 2013 года страница Bootstrap 3 «Настройка и загрузка» находится по адресу http://getbootstrap.com/customize/

В Bootstrap 3 соответствующей переменной является @ grid-float-breakpoint.

На следующей странице переполнения стека есть дополнительная информация: Bootstrap 3 Navbar Collapse

4 голосов
/ 25 июля 2012

Я подозреваю (и надеюсь), что это будет официально осуществлено в ближайшее время.Тем временем я просто делаю простой хак CSS, используя visible-phone на выпадающей кнопке и visible-tablet на втором наборе кнопок, которые я поместил в панель навигации.Итак, раньше это выглядело так:

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

А теперь это выглядит так:

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

Обратите внимание, что порядок элементов важен, иначе у вас могут возникнуть проблемы с элементами, переходящими в следующуюлиния

3 голосов
/ 03 марта 2014

Я создал отдельный файл SCSS, в котором перечислены все партиалы, необходимые для начальной загрузки, и таким образом я могу включать и выключать партиалы в зависимости от потребностей нашего сайта. Таким образом, я могу легко переопределить переменную точки останова. Вот что я получил:

// Core variables and mixins
$grid-float-breakpoint: 991px;
@import "bootstrap/variables";
@import "bootstrap/mixins";

// Reset
@import "bootstrap/normalize";
//@import "bootstrap/print";

// Core CSS
@import "bootstrap/scaffolding";
@import "bootstrap/type";
//@import "bootstrap/code";
@import "bootstrap/grid";
@import "bootstrap/tables";
@import "bootstrap/forms";
@import "bootstrap/buttons";

// Components
@import "bootstrap/component-animations";
@import "bootstrap/glyphicons";
@import "bootstrap/dropdowns";
//@import "bootstrap/button-groups";
//@import "bootstrap/input-groups";
@import "bootstrap/navs";
@import "bootstrap/navbar";
@import "bootstrap/breadcrumbs";
@import "bootstrap/pagination";
@import "bootstrap/pager";
@import "bootstrap/labels";
@import "bootstrap/badges";
//@import "bootstrap/jumbotron";
//@import "bootstrap/thumbnails";
@import "bootstrap/alerts";
//@import "bootstrap/progress-bars";
//@import "bootstrap/media";
//@import "bootstrap/list-group";
@import "bootstrap/panels";
//@import "bootstrap/wells";
@import "bootstrap/close";

// Components w/ JavaScript
@import "bootstrap/modals";
@import "bootstrap/tooltip";
//@import "bootstrap/popovers";
//@import "bootstrap/carousel";

// Utility classes
@import "bootstrap/utilities";
@import "bootstrap/responsive-utilities";
2 голосов
/ 21 апреля 2014

Вот мой код (Все другие решения показывали прикольную полосу прокрутки, когда выпадала панель навигации, поэтому я отредактировал код, чтобы он не стал).Я не мог написать на другой ответ, поэтому я сделаю это здесь для других, чтобы найти.Я использую рельсы для этого с Bootstrap 3.0.

активы / таблицы стилей / рамки и переопределения вставьте это: (Установите максимальную ширину в соответствии с любым значением для достижения вашей цели.)

@media (max-width: 2500px) {
.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;
}
.navbar-nav>li {
    float: none;
}
.navbar-nav>li>a {
    padding-top: 10px;
    padding-bottom: 10px;
}
1 голос
/ 19 марта 2014

Bootstrap 3.x

используя SASS, вы можете изменить значение $ screen-sm, чтобы указать минимальный размер

пример: $ screen-sm: 600px;

Вам необходимо поместить это значение в файл application.scss перед @import "bootstrap";

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

Меньше переменных начинаются с "@", просто изменили их на "$", чтобы переопределить их перед импортом.

Вот список переменных.

1 голос
/ 02 августа 2013

Bootstrap 3.x

используя МЕНЬШЕ , вы можете изменить значение @screen-small, чтобы указать минимальный размер

пример: @screen-small: 600px;

Я использую это, чтобы переключаться в режим «крошечного устройства», только если ширина меньше 600px

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...