Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【CSSサンプル】タブ切り替え表示を2つ配置する場合

 どうも!LSSです!!

 

先日の記事、

を早速使ってくださった、421miyakoさん(id:m421miyako)から問い合わせがありました。

421miyako(id:m421miyako)

このスライダーを何の意味もなく上下の仕切り線みたいに使って、数字を出しておくと読者が、なんじゃこれの感じで混乱して面白そうです。先日のタブですが同じページに二か所入れると干渉しますか?二つ目がうまくいかなかったのでどうかなって。

(ちなみに、使っていただいた記事はこちら

 

そういえば…IDを多用しているため、バリバリ干渉します!

同ページ内で複数置く事を考えていなかったんですね^^;

 

ラジオボタン・ラベル・中身の3種 × タブ数 のIDを使っていて、その全てを別名に変えるのと、ラジオボタンをグループ化している name="rdb" の名前も変えてあげると、複数でも動作します。

 

が、なかなか大変ですよね^^;

構造が分からないとなおさら。

 

という事で、やってみました!

 

 

タブ切り替えを2つ配置

 

タブ1に対応する文章
タブ2に対応する文章
タブ3に対応する文章
タブ4に対応する文章

 

 

 

タブ1に対応する文章
タブ2に対応する文章
タブ3に対応する文章
タブ4に対応する文章

 

 

コード

<style><!--
.divbox{position:relative;}
#lb1,#lb2,#lb3,#lb4{position:relative;top:8px;padding:0px 10px;border-width:1px;border-color:black;border-style:solid solid none solid;border-radius:8px 8px 0px 0px;z-index:1;transition:0.2s ease-out 0s;}
#rdb1,#rdb2,#rdb3,#rdb4{display:none;}
#nkm1,#nkm2,#nkm3,#nkm4{display:none;position:relative;padding:8px;width:100%;border-radius:0px 8px 8px 8px;border:1px solid black;z-index:0;}
#rdb1:checked~#lb1,#rdb2:checked~#lb2,#rdb3:checked~#lb3,#rdb4:checked~#lb4{top:10px;}
#rdb1:checked~#nkm1,#rdb2:checked~#nkm2,#rdb3:checked~#nkm3,#rdb4:checked~#nkm4{display:block;}
#lb1,#nkm1{background-color:#ffdddd;}
#lb2,#nkm2{background-color:#ddffdd;}
#lb3,#nkm3{background-color:#ddddff;}
#lb4,#nkm4{background-color:#ffffdd;}
#lb5,#lb6,#lb7,#lb8{position:relative;top:8px;padding:0px 10px;border-width:1px;border-color:black;border-style:solid solid none solid;border-radius:8px 8px 0px 0px;z-index:1;transition:0.2s ease-out 0s;}
#rdb5,#rdb6,#rdb7,#rdb8{display:none;}
#nkm5,#nkm6,#nkm7,#nkm8{display:none;position:relative;padding:8px;width:100%;border-radius:0px 8px 8px 8px;border:1px solid black;z-index:0;}
#rdb5:checked~#lb5,#rdb6:checked~#lb6,#rdb7:checked~#lb7,#rdb8:checked~#lb8{top:10px;}
#rdb5:checked~#nkm5,#rdb6:checked~#nkm6,#rdb7:checked~#nkm7,#rdb8:checked~#nkm8{display:block;}
#lb5,#nkm5{background-color:#000000;color:#ffffff;}
#lb6,#nkm6{background-color:#333333;color:#aaaaaa;}
#lb7,#nkm7{background-color:#aaaaaa;color:#333333;}
#lb8,#nkm8{background-color:#ffffff;color:#000000;}
--></style>
<div class="divbox">
<input id="rdb1" checked="checked" name="rdb" type="radio" />
<input id="rdb2" name="rdb" type="radio" />
<input id="rdb3" name="rdb" type="radio" />
<input id="rdb4" name="rdb" type="radio" />
<label id="lb1" for="rdb1">タブ1</label><label id="lb2" for="rdb2">タブ2</label><label id="lb3" for="rdb3">タブ3</label><label id="lb4" for="rdb4">タブ4</label>
<div id="nkm1">タブ1に対応する文章</div>
<div id="nkm2">タブ2に対応する文章</div>
<div id="nkm3">タブ3に対応する文章</div>
<div id="nkm4">タブ4に対応する文章</div>
</div>
<p> </p>
<p> </p>
<p> </p>
<div class="divbox">
<input id="rdb5" checked="checked" name="rdb2" type="radio" />
<input id="rdb6" name="rdb2" type="radio" />
<input id="rdb7" name="rdb2" type="radio" />
<input id="rdb8" name="rdb2" type="radio" />
<label id="lb5" for="rdb5">タブ1</label><label id="lb6" for="rdb6">タブ2</label><label id="lb7" for="rdb7">タブ3</label><label id="lb8" for="rdb8">タブ4</label>

<div id="nkm5">タブ1に対応する文章</div>
<div id="nkm6">タブ2に対応する文章</div>
<div id="nkm7">タブ3に対応する文章</div>
<div id="nkm8">タブ4に対応する文章</div>
</div>

 

赤文字部分が追記部分です。

途中、

<p> </p>
<p> </p>
<p> </p>

の部分はあってもなくても構いません。

この部分に他の文章を普通に挟める、という事を明示するために入れておきました。

 

2つめのタブ切り替えの、タブと中身の色、および文字色を指定しているのは、

#lb5,#nkm5{background-color:#000000;color:#ffffff;}
#lb6,#nkm6{background-color:#333333;color:#aaaaaa;}
#lb7,#nkm7{background-color:#aaaaaa;color:#333333;}
#lb8,#nkm8{background-color:#ffffff;color:#000000;}

の部分です。

色は自由に別の色を指定できます^^

 

 

じゃあ、3つ使いたくなったら?

…^^;;;;;

また更にコピペして、idとnameを書き換える事になります。

 

一応、参考までに今回行った事を書いてみますね。 

 

元のコード

<style><!--
.divbox{position:relative;}
#lb1,#lb2,#lb3,#lb4{position:relative;top:8px;padding:0px 10px;border-width:1px;border-color:black;border-style:solid solid none solid;border-radius:8px 8px 0px 0px;z-index:1;transition:0.2s ease-out 0s;}
#rdb1,#rdb2,#rdb3,#rdb4{display:none;}
#nkm1,#nkm2,#nkm3,#nkm4{display:none;position:relative;padding:8px;width:100%;border-radius:0px 8px 8px 8px;border:1px solid black;z-index:0;}
#rdb1:checked~#lb1,#rdb2:checked~#lb2,#rdb3:checked~#lb3,#rdb4:checked~#lb4{top:10px;}
#rdb1:checked~#nkm1,#rdb2:checked~#nkm2,#rdb3:checked~#nkm3,#rdb4:checked~#nkm4{display:block;}
#lb1,#nkm1{background-color:#ffdddd;}
#lb2,#nkm2{background-color:#ddffdd;}
#lb3,#nkm3{background-color:#ddddff;}
#lb4,#nkm4{background-color:#ffffdd;}
--></style>
<div class="divbox">
<input id="rdb1" checked="checked" name="rdb" type="radio" />
<input id="rdb2" name="rdb" type="radio" />
<input id="rdb3" name="rdb" type="radio" />
<input id="rdb4" name="rdb" type="radio" />
<label id="lb1" for="rdb1">タブ1</label><label id="lb2" for="rdb2">タブ2</label><label id="lb3" for="rdb3">タブ3</label><label id="lb4" for="rdb4">タブ4</label>
<div id="nkm1">タブ1に対応する文章</div>
<div id="nkm2">タブ2に対応する文章</div>
<div id="nkm3">タブ3に対応する文章</div>
<div id="nkm4">タブ4に対応する文章</div>
</div>

の、青文字にした部分がCSSの指定で、オレンジ文字の部分が実際に表示されるタブ切り替えの部分です。

 

これをそれぞれ、コピーして、続けてペーストします。

この時点でほぼコード量が2倍に!w

 

そして、2つめになったほうの#がついているもの… #nkm1 とか #rdb1 とか #lb1 とかを全て末尾の数字部分を+4しました!

例えば#nkm1は#nkm5に、#rdb3は#rdb7に、といった具合です。

(別のidであればなんでもいいのですが、指定箇所も多いので統一ルールで行いました。)

 

そして、オレンジ文字部分のほうの 

name="rdb"

4つ入っていますが、それらを安直に

name="rdb2"

としました。

 

以上で、タブ切り替えを2つ、同じページに置いて干渉せずに動作させる事ができます。

 

最後のついでに、2つめのタブ切り替えの方の色指定を変更してみました。

 

 

あとがき

コードをなるべく短くしよう、という方向で書いたCSSでしたが、こういう時の修正はちょっと面倒になっちゃいましたね^^;

 

クラス指定も織り交ぜて使うとちょっとマシだったかも…?

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^