Bootstrap 3 Свернуть панель навигации

Есть ли способ увеличить точку, в которой панель навигации bootstrap 3 сворачивается (т.е. так, чтобы она сворачивалась в раскрывающееся меню на планшетах с портретной ориентацией)?

Эти два были применимы к начальной загрузке 2, но не сейчас!

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

Измените точку останова адаптивной навигационной панели по умолчанию


person timhc22    schedule 12.08.2013    source источник
comment
Почему они не применимы?   -  person PW Kad    schedule 12.08.2013
comment
мне показалось, что сам код был немного изменен   -  person timhc22    schedule 13.08.2013
comment
Я не совсем понимаю. Вы имеете в виду код CSS? Классы должны быть в целом одинаковыми с небольшими незначительными изменениями.   -  person PW Kad    schedule 13.08.2013
comment
не волнуйтесь, я думаю, я запутался из-за настраиваемых загрузок (в одном из ответов я разместил ссылку, чтобы указать конкретный номер строки для редактирования)   -  person timhc22    schedule 14.08.2013
comment
stackoverflow.com/a/23536146/563309 - у меня работал, кому-то поможет ...   -  person JenonD    schedule 24.06.2014
comment
Было бы неплохо, если бы мы могли определить это встроенное в будущем, например <nav data-sm-collapse="800px"... поскольку я понятия не имею, какая ширина мне нужна, пока не построю.   -  person rybo111    schedule 15.09.2015
comment
Вот рабочее решение CSS: stackoverflow.com/a/36289507/171456   -  person Zim    schedule 09.02.2017


Ответы (12)


Сегодня у меня была такая же проблема.

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 размеров.

Демо

person Seb33300    schedule 27.11.2013
comment
Пришлось добавить .navbar-collapse.collapse.in { display: block!important; }, чтобы он не исчез. Хорошая работа, сэкономила мне часы. - person Dave Forber; 19.03.2014
comment
Отличная альтернатива, но пришлось добавить .navbar-collapse.collapse.in {display: block! Important; маржа сверху: 0 пикселей; } - person Mavis; 03.04.2014
comment
Это помогло мне, так как я уже давно перекомпилировал основной CSS начальной загрузки с другой переменной. Спасибо! - person Amir5000; 23.04.2014
comment
Пришлось убрать поля: 7.5px -15px; получить тексты с работающими курсорами - person Toni; 05.08.2014
comment
Что мне нравится в этом, так это то, что если я обновляю Bootstrap, мне не нужно беспокоиться о поиске переменной и ее перекомпиляции. - person ScubaSteve; 07.08.2014
comment
Выпадающее меню @ Seb33300 в навигаторе по-прежнему использует обычное выпадающее меню, а не скользит вниз, как в мобильной навигаторе. - person skycrew; 22.08.2014
comment
Спасибо, что поделился. Я использовал ваше решение в другом посте: stackoverflow.com/questions/25588388/ - person curious1; 31.08.2014
comment
Спасибо, что поделились. Это было то, что я искал. Решение CSS, не требующее настройки в min-файле - person Dorvalla; 10.09.2014
comment
Спасибо. Сэкономил мне много времени. - person chandan; 25.09.2014
comment
но выпадающие списки все еще были в режиме рабочего стола, мне пришлось отредактировать код в строке 3934 на max-with: 992 (в bootstrap.css), я использую bootstrap 3.2. На всякий случай кому-то это понадобится. - person chandan; 25.09.2014
comment
Это отлично работает, но, похоже, не работает при попытке сделать точку останова меньше 768 пикселей. Есть ли решение? - person Vin; 24.01.2015
comment
Спасибо! работал отлично. Я удалил 'margin: 7.5px -15px;' тем не мение. - person dbrin; 02.03.2015
comment
Кажется, это не обрабатывает dropdown-menu элементы на панели навигации. - person alexw; 10.04.2015
comment
Если вы используете .nav-justified на панели навигации, вам также понадобится это переопределение: .nav-justified ›li {display: block! Important; ширина: авто; } - person Robert Waddell; 01.07.2015
comment
Это просто круто. - person Puce; 02.07.2015
comment
Я обычно не публикую подобные комментарии. Но ... после двух дней поиска и проб и сотен вещей это НАКОНЕЦ сработало! БЛАГОДАРЮ ВАС! - person BritishSteel; 29.10.2015
comment
Что такое .in do? Мне не удалось найти класс в списке классов начальной загрузки здесь: gist.github.com/geksilla/6543145 < / а> - person munchschair; 20.04.2016
comment
@munchschair, строки 3482 и 4194, github.com/twbs/bootstrap/ blob / master / dist / css / bootstrap.css это когда открывается отзывчивое меню. - person Seb33300; 20.04.2016
comment
Для настройки ширины раскрывающегося списка добавьте: .navbar-nav .open .dropdown-menu { position: static; float: none; width: auto; margin-top: 0; background-color: transparent; border: 0; -webkit-box-shadow: none; box-shadow: none; } внутри над медиа-запросом. Для получения дополнительной информации: stackoverflow.com/a/28659861/1360694 - person Siddharth Trikha; 01.10.2016
comment
Пришлось зайти в navbar.less и удалить &.collapse внутри @media (min-width: @grid-float-breakpoint) - person Cr1xus; 13.07.2017
comment
пришлось добавить эту часть в шаблон jekyll, который я использовал для личного портфолио. - person pegasuspect; 29.07.2020

Большая разница между Bootstrap 2 и Bootstrap 3 заключается в том, что Bootstrap 3 «сначала мобильный».

Это означает, что стили по умолчанию разработаны для мобильных устройств, а в случае панелей навигации это означает, что они «свернуты» по умолчанию и «расширяются», когда достигают определенного минимального размера.

На сайте Bootstrap 3 есть «подсказка» о том, что делать: http://getbootstrap.com/components/#navbar

Настроить точку схлопывания

В зависимости от содержимого на панели навигации вам может потребоваться изменить точку, в которой панель навигации переключается между свернутым и горизонтальным режимами. Настройте переменную @ grid-float-breakpoint или добавьте свой собственный медиа-запрос.

Если вы собираетесь перекомпилировать LESS, вы найдете отмеченную переменную LESS в файле variables.less. В настоящее время он установлен на «раскрытие» @media (min-width: 768px), что в терминах Bootstrap 3 является «маленьким экраном» (т. Е. Планшетом).

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

Если вы хотите, чтобы свернутое изображение оставалось немного дольше, вы можете настроить его следующим образом:

@grid-float-breakpoint: @screen-desktop; (точка останова 992px)

или расшириться раньше

@grid-float-breakpoint: @screen-phone (точка останова 480 пикселей)

Если вы хотите, чтобы он расширялся позже, а не перекомпилировал LESS, вам придется перезаписать стили, которые применяются в медиа-запросе 768px, и вернуть их к предыдущему значению. Затем повторно добавьте их в подходящее время.

Я не уверен, есть ли лучший способ сделать это. Перекомпилировать Bootstrap МЕНЬШЕ в соответствии с вашими потребностями - лучший (самый простой) способ. В противном случае вам придется найти все медиа-запросы CSS, которые влияют на вашу панель навигации, перезаписать их стилями по умолчанию @ шириной 768 пикселей, а затем вернуть их обратно на более высокую минимальную ширину.

Перекомпиляция LESS сделает за вас все волшебство, просто изменив переменную. В этом суть прекомпиляторов LESS / SASS. знак равно

(обратите внимание, я просмотрел их все, это примерно 100 строк кода, что меня достаточно раздражает, чтобы отказаться от этой идеи и просто перекомпилировать Bootstrap для данного проекта, чтобы не испортить что-то случайно)

Надеюсь, это поможет!

Ваше здоровье!

person jmbertucci    schedule 20.08.2013
comment
В чем разница между загрузочной версией по умолчанию и индивидуальной версией? Их структуры папок совершенно разные, и в индивидуальной версии есть только файлы CSS и JS, так как версия по умолчанию имеет много папок, включая LESS. Я немного сбит с толку. - person Rahul Patwa; 15.09.2013
comment
@RahulPatwa Если вы загрузите полный архив Bootstrap 3 Zip, вы получите вместе с ним все файлы для разработки. Это файлы, которые люди используют для продолжения разработки Bootstrap и включают такие вещи, как рабочие файлы Composer и Grunt, системные файлы git, файлы LESS и т. Д. Полные файлы находятся в папке / dist. Вы увидите папки для /css, /js, /fonts. Его настройка просто дает скомпилированные файлы, которые вы выбрали. - person jmbertucci; 16.09.2013
comment
так что, если я загружу полную загрузку, а затем внесу некоторые изменения в меньшее количество переменных .. Как мне скомпилировать это обратно в файл CSS? - person Rahul Patwa; 17.09.2013
comment
@RahulPatwa Есть несколько способов скомпилировать LESS. На веб-сайте LESS объясняется, как это делается как на стороне клиента, так и на стороне сервера. Crunch - это простой графический интерфейс, который вы можете использовать. Веб-сайт Bootstrap особо рекомендует использовать их инструмент RECESS. И многое другое. - person jmbertucci; 17.09.2013
comment
Самый простой способ - просто перейти к getbootstrap.com/customize и переопределить значение \ @ grid-float-breakpoint. для чего-то жестко запрограммированного (например, 520 пикселей) или для меньшего размера экрана, например \ @ screen-xs-min - person neves; 29.11.2013

Самый простой способ - настроить бутстрап

найти переменную:

 @grid-float-breakpoint

который установлен на @ screen-sm, вы можете изменить его в соответствии с вашими потребностями. Надеюсь, это поможет!

person mshahbazm    schedule 28.08.2013
comment
Установка очень маленького значения, например 1px, отключит сворачивание панели навигации (например, если вы хотите, чтобы панель навигации не реагировала). - person Gregor Slavec; 06.08.2014
comment
Я также установил это на '@ screen-xs-min', чтобы ограничить свернутое меню до 480 пикселей. Для некоторых сайтов это хорошо работает и создает приятный эффект, когда вы можете легко перейти с полного меню на свернутое на iPhone, изменив ориентацию. - person chiappa; 26.10.2016

они контролируются в переменных, нет необходимости возиться с исходным кодом. с начальной загрузкой сначала попробуйте переменные, а затем переопределите. затем вернитесь и попробуйте переменные снова;)

Я использовал 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

person Doug Lee    schedule 26.02.2014
comment
Так чисто. Отличное решение. Спасибо. - person Jedidiah Hurt; 29.04.2015

Благодаря Seb33300 у меня все заработало. Однако кажется, что отсутствует важная часть. По крайней мере, в Bootstrap версии 3.1.1.

Моя проблема заключалась в том, что панель навигации соответственно сворачивалась с правильной шириной, но кнопка меню не работала. Я не мог раскрыть и свернуть меню.

Это потому, что класс collapse.in переопределяется! Important в .navbar-collapse.collapse, и его можно решить, добавив также «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;
    }
}
person Daniel    schedule 14.03.2014
comment
Префект стандартное решение css для начальной загрузки 3.3.6, спасибо! - person xxxbence; 10.11.2016

Я хотел проголосовать и прокомментировать ответ jmbertucci, но мне еще нельзя доверять элементы управления. У меня была такая же проблема, и я решил ее, как он сказал. Если вы используете Bootstrap 3.0, отредактируйте LESS-переменные в variables.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);

Затем установите значение сворачивания для панели навигации с помощью переменной @ grid-float-breakpoint примерно в строке 232. По умолчанию установлено значение @ screen-tablet. Если вы хотите, вы можете использовать значение в пикселях, но я предпочитаю использовать переменные LESS.

person Bastardo Sucio    schedule 24.10.2013
comment
обратите внимание, что размеры теперь устарели, и все, что осталось, это -min: @ screen-md-min: 800px; @ экран-lg-min: 1200 пикселей; @ grid-float-breakpoint: @ screen-md-min; - person Doug Lee; 27.02.2014

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

1) Постарайтесь уменьшить количество пунктов меню или их длину, например удалите пункты меню или сократите слова.

2) Уменьшение отступов между пунктами меню, например:

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

Отступ по умолчанию - 15 пикселей с обеих сторон (слева и справа).

Если вы предпочитаете изменять использование каждой отдельной стороны:

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

Этот параметр также влияет на раскрывающийся список.

Это не отвечает на вопрос, но может помочь другим, кто не хочет связываться с CSS или использовать LESS-переменные. Два общих подхода к решению этой проблемы.

person PepitoSolis    schedule 18.06.2014

Набвар рухнет на маленьких устройствах. Точка сворачивания определяется точкой останова @ grid-float в переменных. По умолчанию это будет до 768 пикселей. Для экранов с шириной экрана менее 768 пикселей панель навигации будет выглядеть так:

введите описание изображения здесь

Можно изменить точку останова @ grid-float-break в файле variables.less и перекомпилировать Bootstrap. При этом вам также придется изменить @ screen-xs-max в navbar.less. Вам нужно будет установить это значение для вашей новой точки останова @ grid-float-1. См. Также: https://github.com/twbs/bootstrap/pull/10465 . Это необходимо для изменения форм и раскрывающихся списков навигационной панели в точке останова @ grid-float-break на их мобильную версию.

person Bass Jobsen    schedule 22.09.2013
comment
Как пользоваться стилусом? Вы используете github.com/Acquisio/bootstrap-stylus? В последнем случае следует поступить так же, как указано выше. Загрузите bootstrap-стили, измените настройки в stylus / variables.styl и т. Д. И перекомпилируйте. - person Bass Jobsen; 14.11.2013

Меня беспокоят проблемы с обслуживанием и обновлением после настройки 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; }
}
person cdonner    schedule 21.05.2014

Я применил метод CSS с моей установкой Bootstrap 3.0.0, так как я не так хорошо знаком с 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, думаю, вам не стоит об этом беспокоиться, но в моем случае это помогло мне.

person Markus    schedule 09.10.2013

А для тех, кто хочет свернуть с шириной меньше, чем стандартные 768 пикселей (развернуть с шириной менее 768 пикселей), это необходимый 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;
}
}
person tony day    schedule 25.01.2014

Я думаю, что нашел простое решение для изменения точки останова на коллапс, только через 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, чтобы правильно организовать меню для всех размеров экрана.

Надеюсь это поможет.

person Cosmin    schedule 03.02.2014