Як змінити поріг згортання навігаційної панелі, використовуючи Twitter-bootstrap-responsive?


94

Я використовую Twitter Bootstrap 2.0.1 у проекті Rails 3.1.2, реалізованому за допомогою bootstrap-sass. Я завантаження обидва bootstrap.cssі ті bootstrap-responsive.cssфайли, а також bootstrap-collapse.jsJavascript.

У мене рідинний макет із панеллю навігації, подібною до прикладу . Це слідує інструкціям на панелі навігації щодо "адаптивних змін" тут . Це чудово працює: якщо сторінка вужча, ніж приблизно 940 пікселів, панель навігації згортається і відображається "кнопка", яку я можу натиснути, щоб розгорнути.

Однак моя панель навігації виглядає приблизно до 550 пікселів в ширину, тобто її не потрібно згортати, якщо екран не дуже вузький.

Як сказати Bootstrap згортати панель навігації, лише якщо екран має ширину менше 550 пікселів?

Зауважте, що в цей момент я не хочу модифікувати інші чуйні способи поведінки, наприклад, складання елементів замість того, щоб відображати їх поруч.


Чудове питання! З інформації, яку ви дали у своєму запитанні, я зміг реалізувати розбірну навігаційну панель, починаючи з нічого. Дякую!
— methodMan

Відповіді:


41

Ви шукаєте рядок 239 з bootstrap-responsive.css

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

Де max-widthзначення викликає адаптивну навігацію. Змініть його на 550 пікселів або близько того, і він повинен змінити розмір.


12
Дякую. bootstrap-responsive.cssпохований у самоцвіті bootstrap-sass. Так, я міг це відредагувати, але тоді, коли дорогоцінний камінь буде оновлений, мені доведеться це зробити ще раз. Чи є спосіб замінити запит @media, подібний до перевизначення інших елементів CSS?
— Mark Berry

Я не можу придумати жодного способу досягти перевизначення без перезавантаження всіх оголошень CSS.
— методофакція

Добре, дякую. Я спробував цей підхід, замінивши цей рядок у коді gem, і це як би працює, але я отримую додаткові горизонтальні відступи на панелі навігації нижче ширини 767px, мабуть, через CSS в @media (max-width: 767px)блоці. Здається, мені доведеться зробити більш масштабне перевизначення, як пропонується у відповіді Андреса Іліча.
— Марк Беррі

2
Як згадувалось у моєму коментарі до відповіді @Andres Ilich, безпосереднє оновлення вихідного коду здається меншим із двох зол, коли справа стосується ремонтопридатності, тож поки що я прийму це рішення. Я можу жити з 767 пікселів як мінімальний поріг, хоча я міг би, можливо, ще більше зменшити це, створивши спеціальний контейнер для панелі навігації, на який це не вплинуло @media (max-width: 767px). Сподіваємось, Bootstrap (або bootstrap-sass) колись включить засіб для використання змінних для встановлення порогових значень, але я думаю, що для цього потрібна інтерполяція у селекторах медіа .
— Mark Berry

1
Точка зупинки навігаційної панелі замінила CSS для Bootstrap 3 - ось робочий приклад для 3.1: bootply.com/120604
— Зім,

73

Bootstrap> 2.1 && <3

  • Використовуйте менш версію bootstrap
  • Змініть змінну @navbarCollapseWidth у variables.less
  • Перекомпілювати.

Оновлення 2013: простий спосіб

(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);

6
Ви можете відвідати twitter.github.com/bootstrap/customize.html#variables та змінити ширину та завантажити. Компіляція не потрібна.
— Архонік

Текст посилання та кнопки оновлено: getbootstrap.com/customize/#less-variables & "Компіляція та завантаження"
— digitalextremist

Це працює і з самоцвітом twitter-bootstrap-rails, якщо ви поміщаєте щось на зразок @navbarCollapseWidth: 600px;boostrap_and_overrides.css.less.
— sffc

Здається, це більше не стосується Bootstrap 3. :(
— CodingWithSpike

А як щодо Bootstrap 4?
— Аарон Франке,

11

Ви можете встановити новий @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.


Дякуємо за детальну відповідь. Здається, це працює - я все ще намагаюся зрозуміти, як. Якщо я вас правильно розумію, ви (1) клонували початковий @media (max-width: 979px)запит, щоб зробити новий @media (max-width: 550px)запит. Тоді (2) ви вручну закодували новий запит 979px, щоб замінити ефекти запиту 979px в основному bootstrap-responsive.css? Послідовність тегів у вашому CSS, здається, не відповідає послідовності в bootstrap-responsive.css, тому мені важко порівнювати їх, щоб побачити, що ви зробили.
— Mark Berry

@MarkBerry Ви на правильному шляху. @media (max-width: 550px)Запит я написав не слід початкового @media (max-width: 979px)синтаксису запитів , тому що все , що я зробив швидкий приклад перевизначення його вручну через палій і копіювати / вставити, став ледачим на те, але правильний спосіб зробити це , як ви згадали про вашому другому точка.
— Андрес Іліч

1
Що стосується ремонтопридатності, це жорсткий заклик. Я боюся, що такий різновид великої заміни, хоча і забезпечує абсолютний контроль, означатиме багато ручної перевірки після кожного оновлення Bootstrap порівняно з безпосереднім оновленням одного чи двох рядків вихідного коду відповідно до пропозиції @Duopixel. Я частково використовую Bootstrap, тому що я не чувак CSS, тому я думаю, що поки що піду на більш просте рішення.
— Mark Berry

6

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


Будь ласка, поясніть, куди ви помістили цю змінну?
— Andy Hayden

До будь-якого імпорту Bootstrap, наприклад@import "bootstrap";
— Ешлі


4

Я підозрюю (і сподіваюся) це незабаром буде запроваджено офіційно. Тим часом я просто роблю простий злом 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

Я створив окремий файл 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

Ось мій код (Усі інші рішення показали прикольну смугу прокрутки, коли навігаційна панель опустилася, тому я відредагував код, щоб він цього не зробив). Я не міг розмістити іншу відповідь, тому я зроблю це тут, щоб інші могли знайти. Я використовую рейки для цього з 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

Запуск 3.x

використовуючи LESS , ви можете змінити значення, @screen-smallщоб встановити мінімальний розмір

приклад: @screen-small: 600px;

я використовую це, щоб перейти в режим «крихітного пристрою» лише тоді, коли ширина менше 600 пікселів


Чи знаєте ви, як це зробити за допомогою SCSS?
— bcackerman

вибачте, я не маю. я думав, що bootstrap був розроблений із використанням LESS, тому вам, можливо, доведеться зробити це .css способом (див. bootstrap 2 відповіді вище)
— JasonS

1

Запуск 3.x

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

приклад: $ screen-sm: 600px;

Вам потрібно помістити це значення у файл application.scss перед початком @import "bootstrap";

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

Менше змінних починається з "@", просто змінивши їх на "$", щоб замінити їх перед імпортом.

Ось список змінних.


Це порушує функціональність
— blnc

1

Bootstrap 4.x

Змінити поріг згортання в Bootstrap 4.x можна лише швидко. Є 6 випадків:

  1. Завжди розширюйте, ніколи не згортайте (тобто точка зупинки 0px): <nav class="navbar navbar-expand">...</nav>
  2. Точка зупинки - sm (576px):<nav class="navbar navbar-expand-sm">...</nav>
  3. Точка зупинки - MD (768 пікселів):<nav class="navbar navbar-expand-md">...</nav>
  4. Точка зупинки - LG (992 пікселів):<nav class="navbar navbar-expand-lg">...</nav>
  5. Точка зупинки - xl (1200 пікселів):<nav class="navbar navbar-expand-xl">.../nav>
  6. Завжди руйнуйся, ніколи не розширюй (тобто точка зупинки ∞px). : <nav class="navbar">...</nav>(Просто видаліть navbar-expand-*клас. Спочатку для мобільних пристроїв, як у Bootstrap 4.x)

Похвала цій статті Керол Скеллі, яку я знайшов https://medium.com/wdstack/examples-bootstrap-4-navbar-b3c9dc0edc1a


0

Це чудовий приклад того, де ви могли використовувати МЕНШУ версію файлів CSS Bootstrap. Як це зробити - нижче.

Ще краще було б надіслати це як запит на витяг на Github, щоб усі могли отримати вигоду, і ваш "користувацький код", сподіваємось, буде частиною Bootstrap, що рухається вперед.

  • Додайте змінну, variables.lessяка визначає час згортання панелі навігації. Щось на зразок:@navCollapseWidth: 979px
  • Потім змініть responsive-navbar.less...
    • Вгору зверху змінити @media (max-width: 979px)на@media (max-width: @navCollapseWidth)
    • Унизу змініть @media (min-width: 980px)на@media (max-width: @navCollapseWidth - 1)

Звичайно ... вам доведеться компілювати МЕНШЕ за допомогою одного із запропонованих методів .


Очевидно, Bootstrap 2.0.4 змінив структуру файлів для адаптивних матеріалів. Див. Коментар автора bootstrap-sass @Thomas McDonald. Ще не заглиблювався в це, але це може дозволити легше модифікувати поріг навіть у версії SASS.
— Mark Berry

Вибачте; Я повністю пропустив коментар Sass у питанні ... Я просто зосередився на Bootstrap на основі категорії. Однак структура файлів виглядає так само, як і те, що я дивився в Bootstrap ... в будь-якому випадку я оновлю відповідь на це, відповідаючи на запитання.
— Джейсон Капріотті,

Не хвилюйтесь. І я цілком згоден з тим, що найкращим рішенням було б, щоб завантажувальний файл власним чином пропонував змінну або серію змінних, яка контролює пороги згортання навігаційної панелі. Я недостатньо досвідчений у CSS, LESS, SASS або медіа-запитах, щоб писати це вдосконалення;).
— Mark Berry

0

Поглибивши хакерство Тайлера ще більше, додавши класифікований блок із видимим телефоном та клас прихованого телефону до елемента в основній навігації, що розкладається, ви можете "витягнути" один або два згорнутих елемента для відображення навіть на панелі навігації телефону.

<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

Просто запишіть цей код у свій власний файл style.css, і він буде працювати

@media (min-width: 768px) and (max-width: 991px) {
        .navbar-collapse.collapse {
            display: none !important;
        }
        .navbar-collapse.collapse.in {
            display: block !important;
        }
        .navbar-header .collapse, .navbar-toggle {
            display:block !important;
        }
        .navbar-header {
            float:none;
        }
        .navbar-nav {
            float: none !important;
            margin: 0px;
        }
        .navbar-nav {
            margin: 7.5px -15px;
        }
        .nav > li {
            position: relative;
            display: block;
        }
        .navbar-nav > li {
            float: none !important;
        }
        .nav > li > a {
            position: relative;
            display: block;
            padding: 10px 15px;
        }
        .navbar-collapse {
            padding-right: 15px;
            padding-left: 15px;
            overflow-x: visible;
            border-top: 1px solid transparent;
            box-shadow: 0px 1px 0px rgba(255, 255, 255, 0.1) inset;
        }
        .nav {
            padding-left: 0px;
            margin-bottom: 0px;
            list-style: outside none none;
        }
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.