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

Сделать Bootstrap 3 вкладки отзывчивым

В настоящее время, когда вы настраиваете вкладки в Bootstrap 3, вкладки не реагируют.

Это:

enter image description here

Включение в это:

enter image description here

CSS. Исправление того, как это выглядит, легко, просто удаляя поплавок и т.д. При максимальной ширине. Однако содержимое не связано с вкладкой, поэтому стек вкладок будет работать как вкладки, но при меньших видовых экранах вы можете увидеть или не увидеть изменение в содержании.


Это базовый html для создания навигации с вкладками:

      <!--begin tabs going in wide content -->
       <ul class="nav nav-tabs" id="maincontent" role="tablist">
          <li class="active"><a href="#home" role="tab" data-toggle="tab">Home</a></li>
          <li><a href="#profile" role="tab" data-toggle="tab">Profile</a></li>
          <li class="dropdown">
             <a href="#" id="myTabDrop1" class="dropdown-toggle" data-toggle="dropdown">Dropdown <span class="caret"></span></a>
             <ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop1">
                <li><a href="#dropdown1" tabindex="-1" role="tab" data-toggle="tab">@fat</a></li>
                <li><a href="#dropdown2" tabindex="-1" role="tab" data-toggle="tab">@mdo</a></li>
             </ul>
          </li>
       </ul><!--/.nav-tabs.content-tabs -->


       <div class="tab-content">

          <div class="tab-pane fade in active" id="home">
             <p>Home Content : ...</p>
          </div><!--/.tab-pane -->

          <div class="tab-pane fade" id="profile">
             <p>Profile Content : ...</p>
          </div><!--/.tab-pane -->

          <div class="tab-pane fade" id="dropdown1">
             <p>Dropdown1 - ...</p>
          </div><!--/.tab-pane -->

          <div class="tab-pane fade" id="dropdown2">
             <p>Dropdown 2 - ...</p>
          </div><!--/.tab-pane -->

       </div><!--/.tab-content -->

Как вы вставляете вкладки в Аккордеон или Коллапс, чтобы он был дружелюбен к виду?

4b9b3361

Ответ 1

Закладки Bootstrap не реагируют из коробки. Отзывчивый, ИМО, это изменение стиля, изменение функций - адаптивное. Есть несколько плагинов, чтобы включить вкладки Bootstrap 3 в компонент Collapse. Самый лучший и самый обновленный: https://github.com/flatlogic/bootstrap-tabcollapse.

Здесь один из способов его реализации:

DEMO: http://jsbin.com/zibani/1/

EDIT: http://jsbin.com/zibani/1/edit

Это превращает содержимое в компонент коллапса:

enter image description here

Зависимости:

  • Bootstrap 3.2 css или выше, но все еще в серии 3
  • Bootstrap 3.2 jQuery или выше, но все еще в серии 3
  • Совместимая версия bootstrap-tabcollapse.js

HTML - то же самое, что и вопрос с добавлением имени класса:

       <ul class="nav nav-tabs content-tabs" id="maincontent" role="tablist">

JQuery

$(document).ready(function() {

    // DEPENDENCY: https://github.com/flatlogic/bootstrap-tabcollapse
    $('.content-tabs').tabCollapse();

    // initialize tab function
    $('.nav-tabs a').click(function(e) {
        e.preventDefault();
        $(this).tab('show');
    });

});

CSS - необязательно для жирных пальцев и активных состояний:

.panel-heading {
    padding: 0
}
.panel-heading a {
    display: block;
    padding: 20px 10px;
}
.panel-heading a.collapsed {
    background: #fff
}
.panel-heading a {
    background: #f7f7f7;
    border-radius: 5px;
}
.panel-heading a:after {
    content: '-'
}
.panel-heading a.collapsed:after {
    content: '+'
}
.nav.nav-tabs li a,
.nav.nav-tabs li.active > a:hover,
.nav.nav-tabs li.active > a:active,
.nav.nav-tabs li.active > a:focus {
    border-bottom-width: 0px;
    outline: none;
}
.nav.nav-tabs li a {
    padding-top: 20px;
    padding-bottom: 20px;
}
.tab-pane {
    background: #fff;
    padding: 10px;
    border: 1px solid #ddd;
    margin-top: -1px;
}

Ответ 2

Slack имеет классный способ сделать вкладки с небольшим видом на некоторые из своих страниц администратора. Я сделал что-то подобное, используя бутстрап. Это своего рода вкладки → выпадающий список.

Демо: http://jsbin.com/nowuyi/1

Вот как это выглядит в большом окне просмотра: as tabs

Здесь он выглядит свернутым в небольшом окне просмотра:

свернутое падение

Вот как он выглядит в небольшом окне просмотра:

раскрывать раскрывающийся список

HTML точно такой же, как вкладки начальной загрузки по умолчанию.

Существует небольшой фрагмент JS, для которого требуется jquery (и вставляет два элемента span в DOM):

$.fn.responsiveTabs = function() {
  this.addClass('responsive-tabs');
  this.append($('<span class="glyphicon glyphicon-triangle-bottom"></span>'));
  this.append($('<span class="glyphicon glyphicon-triangle-top"></span>'));

  this.on('click', 'li.active > a, span.glyphicon', function() {
    this.toggleClass('open');
  }.bind(this));

  this.on('click', 'li:not(.active) > a', function() {
    this.removeClass('open');
  }.bind(this));
};

$('.nav.nav-tabs').responsiveTabs();

И тогда есть много css (меньше):

@xs: 768px;


.responsive-tabs.nav-tabs {
  position: relative;
  z-index: 10;
  height: 42px;
  overflow: visible;
  border-bottom: none;

  @media(min-width: @xs) {
    border-bottom: 1px solid #ddd;
  }

  span.glyphicon {
    position: absolute;
    top: 14px;
    right: 22px;
    &.glyphicon-triangle-top {
      display: none;
    }
    @media(min-width: @xs) {
      display: none;
    }
  }

  > li {
    display: none;
    float: none;
    text-align: center;

    &:last-of-type > a {
      margin-right: 0;
    }

    > a {
      margin-right: 0;
      background: #fff;
      border: 1px solid #DDDDDD;

      @media(min-width: @xs) {
        margin-right: 4px;
      }
    }

    &.active {
      display: block;
      a {
        @media(min-width: @xs) {
          border-bottom-color: transparent; 
        }
        border: 1px solid #DDDDDD;
        border-radius: 2px;
      }
    }

    @media(min-width: @xs) {
      display: block;
      float: left;
    }

  }

  &.open {

    span.glyphicon {
      &.glyphicon-triangle-top {
        display: block;
        @media(min-width: @xs) {
          display: none;
        }
      }
      &.glyphicon-triangle-bottom {
        display: none;
      }
    }

    > li {
      display: block;

      a {
        border-radius: 0;
      }

      &:first-of-type a {
        border-radius: 2px 2px 0 0;
      }
      &:last-of-type a {
        border-radius: 0 0 2px 2px;
      }
    }
  }
}

Ответ 3

enter image description here

Есть новый: http://hayatbiralem.com/blog/2015/05/15/responsive-bootstrap-tabs/

А также образец Codepen доступен здесь: http://codepen.io/hayatbiralem/pen/KpzjOL

Нет необходимости плагин. Он использует только немного CSS и JQuery.

Вот пример разметки вкладок:

<ul class="nav nav-tabs nav-tabs-responsive">
    <li class="active">
        <a href="#tab1" data-toggle="tab">
            <span class="text">Tab 1</span>
        </a>
    </li>
    <li class="next">
        <a href="#tab2" data-toggle="tab">
            <span class="text">Tab 2</span>
        </a>
    </li>
    <li>
        <a href="#tab3" data-toggle="tab">
            <span class="text">Tab 3</span>
        </a>
    </li>
    ...
</ul>

.. и коды jQuery также здесь:

(function($) {

  'use strict';

  $(document).on('show.bs.tab', '.nav-tabs-responsive [data-toggle="tab"]', function(e) {
    var $target = $(e.target);
    var $tabs = $target.closest('.nav-tabs-responsive');
    var $current = $target.closest('li');
    var $parent = $current.closest('li.dropdown');
        $current = $parent.length > 0 ? $parent : $current;
    var $next = $current.next();
    var $prev = $current.prev();
    var updateDropdownMenu = function($el, position){
      $el
        .find('.dropdown-menu')
        .removeClass('pull-xs-left pull-xs-center pull-xs-right')
        .addClass( 'pull-xs-' + position );
    };

    $tabs.find('>li').removeClass('next prev');
    $prev.addClass('prev');
    $next.addClass('next');

    updateDropdownMenu( $prev, 'left' );
    updateDropdownMenu( $current, 'center' );
    updateDropdownMenu( $next, 'right' );
  });

})(jQuery);

Ответ 4

Я предпочитаю только схему css, основанную на горизонтальном прокрутке, например вкладки на Android. Это мое решение, просто оберните класс nav-tabs-отзывчивым:

<div class="nav-tabs-responsive">
  <ul class="nav nav-tabs" role="tablist">
    <li>...</li>
  </ul>
</div>

И две строки css:

.nav-tabs { min-width: 600px; }
.nav-tabs-responsive { overflow: auto; }

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

Ответ 5

Чистый CSS только для навигационных вкладок, очень просто для маленьких экранов:

@media (max-width: 767px) {
     .nav-tabs {
         min-width: 100%;
         display: inline-grid;
     }
}

Ответ 6

Решение всего за 3 строки:

@media only screen and (max-width: 479px) {
   .nav-tabs > li {
      width: 100%;
   }
}

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

Конечно, вы можете получить горизонтальную область прокрутки с white-space: nowrap уловка, но полосы прокрутки на рабочих столах выглядят некрасиво, поэтому вам приходится писать код js, и все становится совсем не тривиальным!