Подтвердить что ты не робот

Twitter Bootstrap - отзывчивый аффикс

Я использую Twitter Bootstrap, и у меня есть следующее:

<div class="row">

    <div class="span3">
        <div data-spy="affix">
            <form>
                <!-- inputs and stuff -->
            </form>
        </div>
    </div>

    <!-- span9 and its contents -->

</div>

Bootstrap правильно применяет эффект аффикса на <div>, и он остается неподвижным, когда я прокручиваю страницу вниз. Однако, как только я изменил размер страницы на мобильные размеры и загрузочные эффекты реагирования, (привязка к навигационной панели/объекты хорошо выравниваются друг под другом), прикрепленный <div> теперь поверх других элементов страницы и становится беспорядочным. Это происходит потому, что .affix имеет position: fixed, что очень хорошо объясняет это.

Теперь я перешел на веб-сайт Bootstrap и изменил размер страницы на мобильные размеры, прикрепленный элемент (<ul> в их случае) начинает хорошо ладить со страницей, занимая свое естественное место, не переходя на другие элементы. Я также заметил, что как только это произойдет, класс изменится с affix на affix-top.

Я не уверен, что это их настройка или часть этого фреймворка, потому что структура, по-видимому, не ведет себя одинаково. Может ли кто-нибудь уточнить это? Мне нужно иметь такое же поведение на моем <div>, где, если страница будет изменена до мобильных размеров, прикрепленный элемент займет свое естественное место.

Изменить: Мое наблюдение немного испорчено. Я заметил, что элемент на своей странице изначально имеет affix-top, и после прокрутки ниже data-top-offset он изменяется на affix. Он по-прежнему не объясняет, почему мой <div> не будет отображаться как их <ul> при изменении размера.

4b9b3361

Ответ 1

Bootstrap использует дополнительный файл CSS для своих документов, который переопределяет поведение некоторых элементов по умолчанию.

В частности, в строке 917 они меняют position прикрепленной боковой панели (как часть медиа-запроса ширины < 767px) до static:

.bs-docs-sidenav.affix {
  position: static;
  width: auto;
  top: 0;
}

У них есть несколько дополнительных пользовательских стилей, применяемых к прикрепленной боковой панели; вы можете просмотреть их, используя Chrome Web Inspector/Firebug в окне размера телефона.

Ответ 2

HTML Не прикрепляйте span3 (или span4 и т.д.) DIV, но его дочерний элемент; в моем случае я прикреплял #sidebar. Также вам не нужно добавлять в этот div класс .affix или data-offset-top = "XXX". Следующий трюк сделает Javascript.

  <aside class="span3">
    <div id="sidebar">
     <p>some content</p>
    </div>
  </aside> 

CSS (приведенный ниже код не существует на bootstrap.css, я скопировал его из http://twitter.github.io/bootstrap/assets/css/docs.css)

.affix-bottom {
    position: absolute;
    top: auto;
    bottom: 400px;
}

Javacript следующие js изменят класС#sidebar с .affix на .affix-bottom в зависимости от того, сколько страниц прокручивается

   $('#sidebar').affix({
      offset: {
        bottom: 450
      }
   });

Действительно, при малых разрешениях #sidebar будет перекрывать другие элементы. Чтобы решить эту проблему, используйте загрузочные медиа-запросы http://twitter.github.io/bootstrap/scaffolding.html#responsive

Как ранее отмечалось Sara, вы можете использовать что-то вроде.

@media(max-width:767px){
   .affix {
     position: static;
     width: auto;
     top: 0;
    }
}

.., чтобы вы делали #sidebar.

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

Ответ 3

У меня была такая же проблема, и моим решением было удалить поведение аффикса для меньших размеров экрана. Например, чтобы удалить его для размеров ниже 1199 пикселей:

#map {

  @media (min-width: 1199px) {
    &.affix-top {
    }

    &.affix {
      position: fixed;
      top: 20px;
      bottom: 100px;
    }

    &.affix-bottom {
    }
  }
}