web-dev-qa-db-ja.com

Make Bootstrap 3 Tabs Responsive

現在、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 -->

タブをアコーディオンまたはコラプスに変えて、ビューポートを小さくする方法は?

25
Christina

ブートストラップタブはすぐに反応しません。レスポンシブ、IMOはスタイルの変更であり、機能の変更はアダプティブです。 Bootstrap 3つのタブをCollapseコンポーネントに変換するプラグインがいくつかあります。最新かつ最適なものは次のとおりです。 https://github.com/flatlogic/bootstrap-tabcollapse

これを実装する1つの方法を次に示します。

デモ: http://jsbin.com/zibani/1/

編集: http://jsbin.com/zibani/1/edit

これにより、コンテンツが折りたたみコンポーネントになります。

enter image description here

依存関係:

  1. Bootstrap 3.2 css以上だが、まだ3シリーズ
  2. Bootstrap 3.2 jQueryまたはそれ以降、まだ3シリーズ
  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;
}
29
Christina

Slackには、管理ページの一部でタブを小さなビューポートに対応させるクールな方法があります。ブートストラップを使用して似たようなものを作りました。それは一種のタブ→ドロップダウンです。

デモ: http://jsbin.com/nowuyi/1

大きなビューポートでは次のように表示されます。 as tabs

これは、小さなビューポート上で折りたたまれた様子です。

collapsed dropdown

小さなビューポートでどのように展開されるかを以下に示します。

open dropdown

hTMLはデフォルトのbootstrap tabsとまったく同じです。

Jqueryを必要とする(そしてDOMに2つのspan要素を挿入する)小さなJSスニペットがあります:

$.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;
      }
    }
  }
}
28
Lee

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);
11
hayatbiralem

Androidのタブのように、水平スクロールに基づくCSSのみのスキームを好みます。これは私のソリューションです。nav-tabs-responsiveクラスでラップするだけです:

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

そして、2つのCSS行:

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

600pxは、応答するポイントです(bootstrap変数)を使用して設定できます)

Navタブ専用の純粋なCSS、小さな画面では非常にシンプル:

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

解決策はわずか3行です。

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

..しかし、他の次元のより多くの行に折り返すタブのアイデアを受け入れなければなりません。

もちろん、white-space: nowrapトリックで水平スクロール領域を実現できますが、デスクトップではスクロールバーがtheいので、jsコードを記述する必要があり、すべてが些細なものになり始めます。

0
centurian