現在、Bootstrap 3でタブを設定すると、タブは応答しなくなります。
この:
これに変わります:
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 -->
タブをアコーディオンまたはコラプスに変えて、ビューポートを小さくする方法は?
ブートストラップタブはすぐに反応しません。レスポンシブ、IMOはスタイルの変更であり、機能の変更はアダプティブです。 Bootstrap 3つのタブをCollapseコンポーネントに変換するプラグインがいくつかあります。最新かつ最適なものは次のとおりです。 https://github.com/flatlogic/bootstrap-tabcollapse 。
これを実装する1つの方法を次に示します。
これにより、コンテンツが折りたたみコンポーネントになります。
依存関係:
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;
}
Slackには、管理ページの一部でタブを小さなビューポートに対応させるクールな方法があります。ブートストラップを使用して似たようなものを作りました。それは一種のタブ→ドロップダウンです。
これは、小さなビューポート上で折りたたまれた様子です。
小さなビューポートでどのように展開されるかを以下に示します。
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;
}
}
}
}
新しいものがあります: 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);
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;
}
}
解決策はわずか3行です。
@media only screen and (max-width: 479px) {
.nav-tabs > li {
width: 100%;
}
}
..しかし、他の次元のより多くの行に折り返すタブのアイデアを受け入れなければなりません。
もちろん、white-space: nowrap
トリックで水平スクロール領域を実現できますが、デスクトップではスクロールバーがtheいので、jsコードを記述する必要があり、すべてが些細なものになり始めます。