Устранение неполадок Bootstrap Navbar: неожиданное поведение раскрывающегося меню

У меня есть несколько проблем, но главная проблема — мобильность с выпадающими меню. Я не могу понять, что я делаю неправильно.

Вот мой HTML:

<div class="navbar navbar-inverse">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button>
        </div><!--nav-header-->
        <div class="collapse navbar-collapse">
            <ul class="nav nav-pills">
                <li><a href="index.html">Home</a></li>
                <li><a href="About.html">About</a></li>
                <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" data-target="#">Practice <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">A</a></li>
                        <li><a href="#">B</a></li>
                        <li><a href="#">C</a></li>
                        <li><a href="#">D</a></li>
                        <li><a href="#">E</a></li>
                    </ul>
                </li>
                <li><a href="Blog.html">Blog</a></li>
                <li><a href="Contact.html">Contact</a></li>
            </ul>
        </div><!--collapse-->
    </div><!--container-->
</div><!--navbar-->

и вот мой CSS:

.navbar {
  background: black;
  position: absolute;
  margin-top: 50px;
  width: 100%;
  border-top: 2px solid black;
  border-bottom: 3px solid #4f3838;}
.navbar .nav-pills li {
  font-size: 1.2em !important;}
.navbar .nav-pills a {
  color: white;
  margin: 0 3px 0 3px;}
.navbar .nav-pills a:hover {
  color: black;}
.dropdown .dropdown-menu {
  background: black;}

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

Моя последняя проблема заключается в том, что когда я выбираю раскрывающийся список «практика», у меня есть набор текста, который становится черным при наведении мыши, но поскольку это навигационная таблетка, фон становится белым, когда он выбран / открыт. Поэтому, если у вас открыто меню и вы отводите мышь, текст становится белым, а фон также белым. Есть ли решение CSS для этого?

Вы можете увидеть код в действии здесь: http://www.bootply.com/5q1qGfp2c3

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


person Amber Lea    schedule 03.10.2015    source источник


Ответы (2)


Вы наблюдаете странное поведение, поскольку используете nav-pills вместо стандартного < элементы href="http://getbootstrap.com/components/#navbar" rel="nofollow">navbar. См. рабочий пример с некоторыми способами настройки всего.

/***Navbar Background Color, Border Removed ,Border Radius Sqaure***/

.navbar.navbar-custom {
  background: black;
  margin-top: 50px;
  border: none;
  border-top: 2px solid black;
  border-bottom: 3px solid #4f3838;
  border-radius: 0;
}
/***Link Color***/

.navbar.navbar-custom .navbar-nav > li > a {
  color: white;
  margin: 0 3px 0 3px;
  font-size: 1.2em;
}
/***Link Color Hover Statr***/

.navbar.navbar-custom .navbar-nav > li > a:hover {
  color: black;
}
/***Link Color Hover Statr***/

.navbar.navbar-custom .navbar-nav > li:hover,
.navbar.navbar-custom .navbar-nav > li:focus {
  background: white;
}
/***Link Background and Color Active State***/

.navbar.navbar-custom .navbar-nav > .active,
.navbar.navbar-custom .navbar-nav > .active > a,
.navbar.navbar-custom .navbar-nav > .active > a:hover,
.navbar.navbar-custom .navbar-nav > .active > a:focus {
  background: white;
  color: black;
}
/***Navbar Brand Link Color***/

.navbar.navbar-custom .navbar-brand {
  color: white;
}
/***Dropdown-menu Background Color***/

.navbar.navbar-custom .dropdown-menu {
  background: black;
  border: none;
}
/***Dropdown-menu Color***/

.navbar.navbar-custom .dropdown-menu > li > a {
  color: white;
  font-size: 1.2em;
}
/***Dropdown-menu Color Hover and Focus State***/

.navbar.navbar-custom .dropdown-menu > li > a:hover,
.navbar.navbar-custom .dropdown-menu > li > a:focus {
  color: black;
  background: white;
}
/***Dropdown Background Active State***/

.navbar.navbar-custom .nav li.dropdown.open > .dropdown-toggle,
.navbar.navbar-custom .nav li.dropdown.active > .dropdown-toggle,
.navbar.navbar-custom .nav li.dropdown.open.active > .dropdown-toggle {
  background: white;
  color: black;
}
/***Toggle Button***/

.navbar.navbar-custom .navbar-header .navbar-toggle {
  border: none;
}
/***Toggle Button Hover and Focus State***/

.navbar.navbar-custom .navbar-header .navbar-toggle:hover,
.navbar.navbar-custom .navbar-header .navbar-toggle:focus {
  background: white;
  border: none;
}
/***Collapse Borders***/

.navbar.navbar-custom .navbar-collapse {
  border: none;
}
@media (max-width: 767px) {
  .navbar.navbar-custom li.dropdown .dropdown-menu > li > a {
    color: white;
    background: black;
  }
  /***Dropdown-menu Color Hover and Focus State***/
  .navbar.navbar-custom li.dropdown .dropdown-menu > li > a:hover,
  .navbar.navbar-custom li.dropdown .dropdown-menu > li > a:focus {
    color: black;
    background: white;
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<nav class="navbar navbar-default navbar-custom">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>

      </button> <a class="navbar-brand" href="#">Brand</a>

    </div>
    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="index.html">Home</a>

        </li>
        <li><a href="About.html">About</a>

        </li>
        <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>

          <ul class="dropdown-menu">
            <li><a href="#">A</a>

            </li>
            <li><a href="#">B</a>

            </li>
            <li><a href="#">C</a>

            </li>
            <li><a href="#">D</a>

            </li>
            <li><a href="#">E</a>

            </li>
          </ul>
        </li>
        <li><a href="Blog.html">Blog</a>

        </li>
        <li><a href="Contact.html">Contact</a>

        </li>
      </ul>
    </div>
    <!-- /.navbar-collapse -->
  </div>
  <!-- /.container-fluid -->
</nav>

person vanburen    schedule 03.10.2015
comment
Да, это решает некоторые проблемы, но вызывает некоторые другие. Спасибо, что нашли время, чтобы сделать все это! Я нашел это stackoverflow.com/questions/23109704/, который фактически решает проблему с выпадающим меню, но у меня возникли проблемы с тем, чтобы заставить его работать для меня. - person Amber Lea; 03.10.2015
comment
Что это вызывает и просто из любопытства, каков вариант использования навигационных таблеток, которые не могут выполнить классы по умолчанию? - person vanburen; 03.10.2015
comment
Это чисто аскетично. На сайте, который я создаю, navbar-nav выглядит не так хорошо, как nav-pills. Одна вещь, которую я собираюсь использовать, - это использовать бутстрап, но сделать его немного менее резаком для печенья. Ваше исправление действительно решает проблемы, которые я упомянул, но потребует много настроек, чтобы вернуть его к тому, что у меня есть сейчас, и более чем удвоит объем кода. Хотя, если я не могу найти решение, мне, возможно, придется попробовать его. Но я полагаю, что должно быть относительно простое решение. - person Amber Lea; 03.10.2015
comment
Если возможно, опубликуйте jsfiddle или ссылку на то, что у вас есть с точки зрения дизайна (даже если функциональность не работает), и я посмотрю на это. - person vanburen; 03.10.2015
comment
Ответ, вероятно, javascript. Я просто еще такой новичок в этом, что избегаю этого, насколько это возможно. Но добавление класса nav-stacked сработало. Теперь мне просто нужно остановить переполнение: прокрутка. - person Amber Lea; 03.10.2015
comment
Это может помочь jsfiddle.net/elektriheart/uq5502xg (это только добавляет (nets) 8 строк CSS при учете удаления jQuery). Что касается проблемы с вашим переполнением, это не совсем область для JS, потому что вы используете раскрывающееся меню (если вы измените цвет фона раскрывающегося меню, вы увидите, что я говорю) меню не предназначено для использования в мобильной навигации (для структуры Bootstrap) вам придется улучшить свой CSS, чтобы в основном имитировать способ работы навигации по умолчанию. - person vanburen; 03.10.2015
comment
Нет проблем и рад, что смог помочь. - person vanburen; 03.10.2015

Добавьте ссылки на сценарии для последних версий Bootstrap и jQuery JavaScript. Это должно исправить выпадающее меню ширины мобильной панели навигации.

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
person Adam Milecki    schedule 03.10.2015
comment
Да, это была моя первая мысль. Первое, что я сделал, это убедился, что эти ссылки обновлены. Я даже скопировал и вставил сюда то, что вы написали, в надежде, что сделал опечатку, но не повезло. - person Amber Lea; 03.10.2015