
BootstrapアコーディオンAlways openを使ってみよう
前回は1番のキャットタワーのメイン情報部分が完了したので、今回は2番のドロップダウン付タブメニューを作っていきます。
ドロップダウン付タブメニューはBootstrapに準備されています。
たくさんの種類があるなか、今回は一番シンプルなデザインで作ります。
*-*-* Chapter41 *-*-*


SAKUWEB さくうぇぶ
今回からドロップダウン付タブメニューを作っていきます。


SAKUWEB さくうぇぶ
ドロップダウンはナビゲーションで使ったので、分かりやすいですね。
そこにタブをメニュー化したものが、ドロップダウン付タブメニューです。
サンプルサイトには、「商品情報」「サイズ」というタブがあり、クリックすると直下に情報が表示・非表示される仕組みになります。
タブを使うと、場所を節約できるため、商品情報など情報量が多い場合やFAQなどによく利用されます。
Components→Nav Tab→Javascript behavior

ドロップダウン付タブメニューには、いろんな種類が用意されています。
今回はシンプルなものを設置していきましょう。
サンプルコードをみると、ulタグで囲まれたパーツとdivタグで囲まれたパーツがあります。
ulタグにはタブメニューを、divタグの方はコンテンツを格納して、
ボタンをクリックすると、指定した情報を表示する仕組みになっています。
この関連付けを行っているのが「aria-labelledby属性」です。
要素とラベルを関連付けします。
関連付けたい要素のid属性の値を、aria-labelledby属性の値にも指定すれば関連付けることができます。
またbuttonタグの「data-bs-target」ですが、これは要素の折り畳みや非表示にする指定で、Bootstrap特有のものです。
Botostrapのコードをコピペします。
場所は、前回作った1番のメイン情報直下です。
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button
class="nav-link active"
id="home-tab"
data-bs-toggle="tab"
data-bs-target="#home"
type="button"
role="tab"
aria-controls="home"
aria-selected="true"
>
Home
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="profile-tab"
data-bs-toggle="tab"
data-bs-target="#profile"
type="button"
role="tab"
aria-controls="profile"
aria-selected="false"
>
Profile
</button>
</li>
<li class="nav-item" role="presentation">
<button
class="nav-link"
id="contact-tab"
data-bs-toggle="tab"
data-bs-target="#contact"
type="button"
role="tab"
aria-controls="contact"
aria-selected="false"
>
Contact
</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div
class="tab-pane fade show active"
id="home"
role="tabpanel"
aria-labelledby="home-tab"
>
...
</div>
<div
class="tab-pane fade"
id="profile"
role="tabpanel"
aria-labelledby="profile-tab"
>
...
</div>
<div
class="tab-pane fade"
id="contact"
role="tabpanel"
aria-labelledby="contact-tab"
>
...
</div>
</div>
buttonタグと本文を入れるdivタグの箇所を抜き出します。
<button
class="nav-link active"
id="home-tab"
data-bs-toggle="tab"
data-bs-target="#home"
type="button"
role="tab"
aria-controls="home"
aria-selected="true"
>
Home
</button>
<div
class="tab-pane fade show active"
id="home"
role="tabpanel"
aria-labelledby="home-tab"
>
...
</div>
まず、divタグのaria-labelledby属性は要素とラベルを関連付けするものでしたね。
buttonタグのid属性「home-tab」とdivタグを関連付けています。
buttonタグの「data-bs-target」は要素の折り畳みを制御していますね。
divタグのid属性「home」を関連付けています。
双方のクラスに「active」が記述されていますね。
「active」が付与された場合にタブが有効となり、違うタブをクリックしたらこのクラスが自動的に消されます。
これで表示非表示を制御しています。
では、このコードをサンプルサイトのようにカスタマイズしていきます。
サンプルサイトのテキストを利用して、カスタマイズしていきましょう。
また、id名なども自由に書き換えていきます。

タブメニューを作ろう
以下の流れで作ってみましょう。
1)buttonタグ
1-1)「商品情報」ボタンを作る
1-2)data-bs-targetを「#prod01」にする
1-3)id属性を「prod-tab」にする
1-4)aria-controlsを「prod」にする
1-5)「サイズ」ボタンを作る
1-6)data-bs-targetを「#size01」にする
1-7)id属性を「size-tab」にする
1-8)aria-controlsを「size」にする
それではコードです。
<ul class="nav nav-tabs nav-fill" id="data" role="tablist">
<li class="nav-item" role="presentation">
<button data-bs-target="#prod01" id="prod-tab" aria-controls="prod" class="nav-link active" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">商品情報</button>
</li>
<li class="nav-item" role="presentation">
<button data-bs-target="#size01" id="size-tab" aria-controls="size" class="nav-link" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">サイズ</button>
</li>
</ul>
本文とタブを関連付けよう
2)divタグ
2-1)「商品情報」の本文を作ろう
<h3 class="h5">据え置きキャットタワー</h3>
<p>安定性抜群の据え置き型キャットタワーです。</p>
<ul>
<li>【省スペース】<br>空間の利用効率がアップする省スペース設計なので、ワンルームでも場所を取りません。</li>
<li>【爪とぎ】<br>爪とぎ用のハシゴとポールを備え付けています。</li>
<li>【おもちゃ付き】<br>ネコが遊べるように、ポンポンのおもちゃをつけました。</li>
<li>【隠れ家】<br>来客時に隠れられるように、パーソナルスペースを確保しました</li>
</ul>2-2)id属性を「prod01」にする
2-3)aria-labelledby属性を「prod-tab」にする
2-4)「サイズ」の本文を作ろう
<h3 class="h5">サイズ</h3>
<ul>
<li>【商品の寸法】55L x 40W x 83H cm</li>
<li>【使用場所】室内</li>
<li>【ペットの成長段階】すべてのライフステージ</li>
<li>【ブランド】SakuWeb</li>
</ul>2-5)id属性を「size01」にする
2-6)aria-labelledby属性を「size-tab」にする
それでは、タブメニューと合算したコードです。
<!-- tabs -->
<ul class="nav nav-tabs nav-fill" id="data" role="tablist">
<li class="nav-item" role="presentation">
<button data-bs-target="#prod01" id="prod-tab" aria-controls="prod" class="nav-link active" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">商品情報</button>
</li>
<li class="nav-item" role="presentation">
<button data-bs-target="#size01" id="size-tab" aria-controls="size" class="nav-link" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">サイズ</button>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div id="prod01" aria-labelledby="prod-tab" class="tab-pane active" role="tabpanel">
<h3 class="h5">据え置きキャットタワー</h3>
<p>安定性抜群の据え置き型キャットタワーです。</p>
<ul>
<li>【省スペース】<br>空間の利用効率がアップする省スペース設計なので、ワンルームでも場所を取りません。</li>
<li>【爪とぎ】<br>爪とぎ用のハシゴとポールを備え付けています。</li>
<li>【おもちゃ付き】<br>ネコが遊べるように、ポンポンのおもちゃをつけました。</li>
<li>【隠れ家】<br>来客時に隠れられるように、パーソナルスペースを確保しました</li>
</ul>
</div>
<div id="size01" aria-labelledby="size-tab" class="tab-pane" role="tabpanel">
<h3 class="h5">サイズ</h3>
<ul>
<li>【商品の寸法】55L x 40W x 83H cm</li>
<li>【使用場所】室内</li>
<li>【ペットの成長段階】すべてのライフステージ</li>
<li>【ブランド】SakuWeb</li>
</ul>
</div>
</div>
これでドロップダウン付タブメニューの設置が完了です。
次回は、要素の順番をブラウザのサイズによって変える方法と、ドロップダウン付タブメニューを設置していきます。
ボタンをクリックすると関連情報が表示される仕組み
場所を節約できるため、情報量が多い場合やFAQなどによく利用される
要素とラベルを関連付けする属性
要素の折り畳みや表示非表示を切り替える