以前、jQueryで作成する「スマホでも実装可能なサイズ可変型タブパネル」の記事を書きましたが、1ページにタブパネルを複数作成すると、表示がおかしくなります。
「メインページにタブパネル」「サイドバーにタブパネル」と2つ作成すると、お互いの命令が干渉しあってタブ展開がうまくいきません。
複数設置できないと具合の悪い場合もあるので、今回は別案として、複数タブパネルを設置したい場合の備忘録。
以前のサンプルに例えばコードをごそっとコピーすると、2つ目のタブをクリックしても1つ目のタブが開閉するだけでうまくいきません。
単純に「href」のリンクと「li」のIDの番号を書きなおせばいけそうな感じでしたが、以下のような現象が起こってうまく行きません。
これでは、全然よろしくないので色々ググッて、別のタブパネルの作成方法を見つけました。
【HTML】
<!--(ひとつ目のタブ)--> <ul class="tabs"> <li id="tab1" class="tab active"><a href="#cont1">タブ01</a></li> <li id="tab2" class="tab"><a href="#cont2">タブ02</a></li> <li id="tab3" class="tab"><a href="#cont3">タブ03</a></li> </ul> <ul class="panels"> <li id="cont1" class="panel active"> タブ01の内容タブ01の内容タブ01の内容タブ01の内容タブ01の内容 </li><!---#cont1--> <li id="cont2" class="panel">タブ02の内容タブ02の内容タブ02の内容タブ02の内容タブ02の内容</li><!---#cont2--> <li id="cont3" class="panel">タブ03の内容タブ03の内容タブ03の内容タブ03の内容タブ03の内容</li><!---#cont3--> </ul> <!--(ひとつ目のタブ)--> <!--(2つ目のタブ)--> <ul class="tabs"> <li id="tab1" class="tab active"><a href="#cont2_01">タブ04</a></li> <li id="tab2" class="tab"><a href="#cont2_02">タブ05</a></li> <li id="tab3" class="tab"><a href="#cont2_03">タブ06</a></li> </ul> <ul class="panels"> <li id="cont2_01" class="panel active">もう一つのタブ01の内容もう一つのタブ01の内容もう一つのタブ01の内容</li><!---#cont2_01--> <li id="cont2_02" class="panel">もう一つのタブ02の内容もう一つのタブ02の内容もう一つのタブ02の内容</li><!---#cont2_02--> <li id="cont2_03" class="panel">もう一つのタブ03の内容もう一つのタブ03の内容もう一つのタブ03の内容</li><!---#cont2_03--> </ul><!--.panels--> <!--(2つ目のタブ)-->
タブ用のリストとコンテンツ用のリストを記述。
タブボタンのリストのアンカータグの「#cont1」とコンテンツのリストのIDを「#cont1」で同じようにひも付けます。
【jQuery】
$(function () { $(".tabs a").on('click', function(e) { e.preventDefault(); var target = $(this).attr('href'); if (! $(target).length) return false; $('.tab', $(this).closest('.tabs')).removeClass('active'); $(this).closest('.tab').addClass('active'); $('.panel', $(target).closest('.panels')).removeClass('active'); $(target).addClass('active'); }); });
本ちゃんのjQueryが読み込まれてるのが大前提として、上記の記述を追加します。
HTMLのコードとの連動はこっちのコードと合わせれば問題なしですね。
【CSS】
body{ width:98%; min-width: 320px; margin: 0; padding:10% 1%; } a{ text-decoration: none; } li{ list-style: none; } li a{ display: block; text-align: center; color: #b4b4b4; } ul.tabs li{ float: left; border-top: 1px solid #000; border-left: 1px solid #000; border-right: 1px solid #000; width:30%; margin-left:2%; line-height: 250%; } ul.tabs li.active a{ background-color: #FFF; color:#000; } ul.panels{ clear:both; padding:3% 2%; border: 1px solid #000; position: relative; top:-1px; z-index: -1; } ul.panels > li.panel { display: none; } ul.panels > li.panel.active { display: block; }
CSSでのデザイン調整は以前のタブ画面と同じです。
デザイン調整をする場合はCSSで調整ですが、ポイントとしては非表示にさせているコンテンツ部分の記述を「ul.panels > li.panel」にして子要素のみに「display:none」を指定します。
「>」がないとコンテンツ内に「ul li」を使うとそれも非表示になってしまいます。
※タブのデザインを別々にしたい場合はclassを複数つけるなどすれば、問題なくできますね。
よっぽど情報量の多いサイトじゃないとタブ画面が1ページに複数あるって事もすくないんでしょうが、サイドバーに複数設置する場合もあるかと思うので、覚えておいて損はないかと・・・。今回は以上です。