2014-01-08 3 views
2

У меня есть нормальный Bootstrap 3 фиксированный навигатор в верхней части моего сайта, который действительно хорош. Проблема, с которой я столкнулся и обнаружил на днях, заключалась в том, что когда навигационная панель сворачивается для доступа к более мелким устройствам, выпадающие элементы уходят с области, обозначенной для навигационной панели. На рисунке ниже показано, что лучше:Collapsed Bootstrap 3 Navbar выходит за пределы (выпадающие списки)

Problem

Итак, Дуги часть является пункт выпадающего меню. При щелчке элементы под ним (отмеченные красным) выходят за пределы красной части меню. Разве навигатор не должен спускаться с ними и скрывать пространство?

В любом случае, я, очевидно, коснулся стиля навигатора, и я думаю, что это происходит неправильно. Вот что я прикоснулся:

.navbar-default { 
    background-color: @dry-red; 
    background-image: -moz-linear-gradient(top, @dry-red, @mid-red); 
    background-image: -ms-linear-gradient(top, @dry-red, @mid-red); 
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@dry-red), to(@mid-red)); 
    background-image: -webkit-linear-gradient(top, @dry-red, @mid-red); 
    background-image: -o-linear-gradient(top, @dry-red, @mid-red); 
    background-image: linear-gradient(top, @dry-red, @mid-red); 
    background-repeat: repeat-x; 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='@dry-red', endColorstr='@mid-red', GradientType=0); 
    border-color: @dark-red; 
    overflow: visible; 
    max-height: 51px; 

    @media (max-width: 768px){ 
     max-height: none; 
     height: auto; 
    } 

    @media (max-width: 470px){ 
     width: 100%; 
     position: fixed; 
     top: 0; 
     left: 0; 
    } 
} 

.navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:hover, .navbar-default .navbar-nav>.open>a:focus { 
    max-height: 51px; 

    @media (max-width: 768px){ 
     max-height: none; 
    } 
} 

.navbar-default .navbar-brand { 
    color: @lighten; 
} 
.navbar-default .navbar-brand:hover, 
.navbar-default .navbar-brand:focus { 
    color: @lighten-hover; 
} 

.navbar-default .navbar-nav > li > a { 
    color: @lighten; 
} 

.navbar-default .navbar-nav > li > a:hover, 
.navbar-default .navbar-nav > li > a:focus { 
    color: @lighten-hover; 
} 

.navbar-default .navbar-nav > .active > a, 
.navbar-default .navbar-nav > .active > a:hover, 
.navbar-default .navbar-nav > .active > a:focus { 
    color: @lighten; 
    background-color: @dark-red; 
} 

.navbar-default .navbar-nav > .open > a, 
.navbar-default .navbar-nav > .open > a:hover, 
.navbar-default .navbar-nav > .open > a:focus { 
    color: @lighten-hover; 
    background-color: @dark-red; 
} 

.navbar-default .navbar-nav > .dropdown > a .caret { 
    border-top-color: @dark-red; 
    border-bottom-color: @dark-red; 
} 

.navbar-default .navbar-nav > .dropdown > a:hover .caret, 
.navbar-default .navbar-nav > .dropdown > a:focus .caret { 
    border-top-color: @dark-red; 
    border-bottom-color: @dark-red; 
} 

.navbar-default .navbar-nav > .open > a .caret, 
.navbar-default .navbar-nav > .open > a:hover .caret, 
.navbar-default .navbar-nav > .open > a:focus .caret { 
    border-top-color: @dark-red; 
    border-bottom-color: @dark-red; 
} 

.navbar-default .navbar-toggle { 
    border-color: @dark-red; 
} 

.navbar-default .navbar-toggle:hover, 
.navbar-default .navbar-toggle:focus { 
    background-color: @dark-red; 
} 

.navbar-default .navbar-toggle .icon-bar { 
    background-color: @lighten; 
} 

.nav > .dropdown, .dropdown-menu > li { 
    position: relative; 
    overflow: visible; 
} 

.navbar-collapse.in { 
    overflow-y: visible; 
} 

@media (max-width: 767px) { 
    .navbar-default .navbar-nav .open .dropdown-menu > li > a { 
     color: @lighten; 
    } 

    .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, 
    .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { 
     color: @lighten-hover; 
    } 
} 

.dropdown-menu:before { 
    position: absolute; 
    top: -7px; 
    right: 9px; 
    display: inline-block; 
    border-right: 7px solid transparent; 
    border-bottom: 7px solid #ccc; 
    border-left: 7px solid transparent; 
    border-bottom-color: rgba(0, 0, 0, 0.2); 
    content: ''; 
} 

.dropdown-menu:after { 
    position: absolute; 
    top: -6px; 
    right: 9px; 
    display: inline-block; 
    border-right: 6px solid transparent; 
    border-bottom: 6px solid #ffffff; 
    border-left: 6px solid transparent; 
    content: ''; 
} 

.nav-center { 
    position: absolute; 
    width: 91px; 
    height: 50px; 
    left: 50%; 
    margin-left: -45px; 
    z-index: 100; 
} 

.navbar-inner { 
    position: relative; 
} 

И это HTML:

<nav class="website-nav navbar navbar-default navbar-static-top" role="navigation"> 

    <div class="navbar-inner"> 
     <div class="nav-center"> 
      <!-- <img src="{{ S_WEB_PATH }}images/brand.png" /> --> 
      <div class="nav-brand"></div> 
     </div> 
    </div> 

    <div class="alt-nav navbar-header"> 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#collapse"> 
      <span class="sr-only">Toogle Navigation</span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
     </button> 
    </div><!-- Navigation header --> 

    <div class="collapse navbar-collapse" id="collapse"> 
     <ul class="nav navbar-nav"> 
      <li {{ INDEX_ACTIVE }}><a href="home"><span class="glyphicon glyphicon-cloud-upload"></span> Home</a></li> 
      <li {{ REMOTE_ACTIVE }}><a href="remote"><span class="glyphicon glyphicon-globe"></span> Remote</a></li> 
      <li {{ ZIP_ACTIVE }} class="visible-lg"><a href="zip"><span class="glyphicon glyphicon-folder-close"></span> ZIP</a></li> 
      <li {{ POPULAR_ACTIVE }}><a href="popular"><span class="glyphicon glyphicon-star"></span> Popular</a></li> 
     </ul> 

     <ul class="nav navbar-nav navbar-right"> 
      {% if not S_LOGGED_IN %} 
      <li><a href="#register" data-toggle="modal"><span class="glyphicon glyphicon-registration-mark"></span> Register</a></li> 
      <li><a href="#login" data-toggle="modal"><span class="glyphicon glyphicon-log-in"></span> Login</a></li> 
      {% else %} 
      <li><a href="#"><span class="glyphicon glyphicon-envelope"></span>&nbsp;&nbsp;<span class="badge user-messages">0</span></a></li> 
      <li><a href="#"><span class="glyphicon glyphicon-bell"></span>&nbsp;&nbsp;<span class="badge user-notification">0</span></a></li> 
      <li class="dropdown"> 
       <a href="#" class="dropdown-toggle valign-middle" data-toggle="dropdown"><span class="glyphicon glyphicon-camera"></span>&nbsp; My Images</a> 
       <ul class="dropdown-menu"> 
        <li><a href="#">All images</a></li> 
        <li class="divider"></li> 
        <li><a href="#">Album 1</a></li> 
        <li><a href="#">Album 2</a></li> 
       </ul> 
      </li> 
      <li class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 
        {% if S_SERVICE_USED == 'facebook' %} 
         <img src="https://graph.facebook.com/{{ S_USERNAME }}/picture" height="24px" class="img-circle avatar" alt="Avatar"> 
        {% else %} 
         {% if S_USER_AVATAR != '' %}<img src="{{ S_AVATAR_PATH }}" id="my_avatar" height="24px" class="img-circle avatar" alt="Avatar">{% else %}<span class="glyphicon glyphicon-user"></span>{% endif %} 
        {% endif %} 
        &nbsp;<span class="{% if S_SERVICE_USED == 'facebook' or S_USER_AVATAR != '' %}valign-middle{% endif %}">{{ S_USERNAME }}</span> 
       </a> 
       <ul class="dropdown-menu"> 
        <li><a href="{{ S_WEB_PATH }}user/{{ S_USERNAME }}"><span class="glyphicon glyphicon-user"></span> Me</a></li> 
        <li><a href="#settings" data-toggle="modal"><span class="glyphicon glyphicon-cog"></span> Settings</a></li> 
        {% if S_SERVICE_USED != 'facebook' and S_SERVICE_USED != 'twitter' %}<li><a href="#profile" data-toggle="modal"><span class="glyphicon glyphicon-edit"></span> Edit Profile</a></li>{% endif %} 
        <li><a href="{{ S_WEB_PATH }}user/do/logout"><span class="glyphicon glyphicon-log-out"></span> Logout</a></li> 
       </ul> 
      </li> 
      {% endif %} 
     </ul> 
    </div> 
</nav><!-- Navigation --> 

Все, кроме этого, нет ничего я прикоснулся. Я попытался исправить эту проблему в .navbar-default путем добавления этого в нем:

@media (max-width: 768px){ 
    max-height: none; 
    height: auto; 
} 

Это ничего не делать.

Любая помощь будет оценена по достоинству, так как это действительно раздражает, когда это происходит и не имеет понятия, откуда она взялась. Может ли это быть проблемой Bootstrap? Я сомневаюсь в этом.

+0

Ссылка: https://github.com/twbs/bootstrap/issues/12006 (может быть, вы его открыли?) – Zlatan

+0

Пожалуйста, добавьте jsFiddle для этого. – Zlatan

+0

Это еще одна проблема.Ссылка на GitHub не имеет отношения к этому вопросу. – Aborted

ответ

6

Это не .navbar-default максимальная высота, которая вызывает свиток. Это .navbar-collapse.

без добавления какой-либо из ваших стилей и просто использовать по умолчанию Bootstrap, я могу видеть, что полосы прокрутки и это вызвано следующим образом:

.navbar-collapse { 
    max-height: 340px; /* *** THIS IS YOUR ISSUE *** */ 
    padding-right: 15px; 
    padding-left: 15px; 
    overflow-x: visible; 
    border-top: 1px solid transparent; 
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); 
    -webkit-overflow-scrolling: touch; 
} 

.navbar-collapse.in { 
    overflow-y: auto; 
} 

A demo of the scrollbar showing.

Таким образом, вы можете исправить это переопределение, что в ваши стили:

.navbar-collapse { 
    max-height: none; 
} 

A demo with scrollbar gone.

Наконец, в отношении аватар слишком большой на больших экранах, если вы действительно хотите использовать медиа-запрос, который вы хотите сделать это следующим образом:

.navbar-default { 
    max-height: 51px; 
} 

.navbar-collapse { 
    max-height: none; 
} 

@media (max-width: 768px){ 
    .navbar-default { 
    max-height: none; 
    } 
} 

A demo of media query working.

Хотя, честно говоря, в последнем примере я не уверен, почему вы не просто установили max-height on the avatar like this.

+1

Чувак, вы рок ! Большое спасибо. – Aborted

+0

, который не работал для меня. Я нахожу, что navbar отлично работает, когда устройство вертикально, но не горизонтально. – totneschap

+0

@totneschap - Он работает в демонстрации на более широком экране, в чем проблема, которую вы конкретно имеете? – davidpauljunior

0

Вместо установки max-height: auto, просто выньте максимальную высоту: 51px; стилей и оставить его на высоте: авто. Контейнер должен расширяться в соответствии с вашим контентом.

+0

Я добавил эту часть из-за того, что аватар (изображение профиля) полностью увеличивает высоту навигатора, что делает его похожим на плохое. Это единственное решение? – Aborted

+0

Я сейчас смущен. Вы хотите, чтобы высота контейнера навигатора увеличивалась, чтобы соответствовать всем вашим пунктам меню? Если это так, то установка высоты этого контейнера на авто - это самый простой способ убедиться, что он достаточно большой, чтобы показать все. – Jerreck

+0

Извините за то, что неясно. Когда navbar находится в большом и среднем, он не рухнет. И тогда изображение профиля заставит навигатор увеличить его высоту и выглядеть странно. Я исправил это, добавив свойство 'max-height'. Однако, когда навигационная панель рушится, навигационная панель становится как на картинке выше. Таким образом, в любом случае с этим сложно справиться. Вот как это выглядит без добавления 'max-height' в незаполненном режиме: http://i.imgur.com/jqxGntz.png ** И ** проблема все еще существует, свернутая версия все еще глючит. – Aborted

Смежные вопросы