はじめに
Bootstrap 3でCollapse(折りたたみ)機能を試して見る(1)では、Collapse機能の基本を試しましたが、不満な点もあります。そこで今回は、Collapseの不満な点を改善する応用的な使用方法を試してみます。
2013年12月28日 12時46分
Bootstrap 3でCollapse(折りたたみ)機能を試して見る(1)では、Collapse機能の基本を試しましたが、不満な点もあります。そこで今回は、Collapseの不満な点を改善する応用的な使用方法を試してみます。
作業の前提条件は、下記のとおりです。
ソフトウエア | バージョン |
---|---|
OS | Windows 7 Ultimate 32bit |
Cygwin | Setup Version 2.831 |
Collapseを試して見ると、以下の不満点があります。
不満点 | 概要 |
---|---|
Anchorをクリックする必要がある。 | デフォルトのCollapseでは、panelクラス使っているため、テキストアンカーをクリックしないと展開できない。 |
複数パネルを表示できない。 | デフォルトのCollapseでは、複数パネルのうち、クリックしたパネルを表示し、その他を折りたたむため、複数パネルの展開ができない。 |
上に挙げた不満点を解消するための、使用方法を解説します。
デフォルトでは、panel-headingクラスを使用しているため、list-item-groupを使用することで、アンカー以外をクリックしても展開できるようになります。
変更前
<div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion" href="#collapse"> Sample </a> </h4> </div>
変更後
<a class="list-group-item" data-toggle="collapse" data-parent="#accordion" href="#collapse"> Sample </a>
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <!--[if IE]> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <![endif]--> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>025-1</title> <link href="bootstrap.min.css" rel="stylesheet"> </head> <body> <header class="navbar navbar-static-top bs-docs-nav" id="top" role="banner"> </header> <div class="container"> <div class="row"> <div class="col-xs-3 col-sm-3 col-md-3"> </div><!-- col-3 --> <!-- メインコンテンツ --> <div class="col-xs-6 col-sm-6 col-md-6"> <h3>panel方式(デフォルト)</h3> <div class="panel-group" id="accordion1"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion1" href="#collapse11"> アコーディオン #1 </a> </h4> </div> <div id="collapse11" class="panel-collapse collapse in"> <div class="panel-body"> <p> アコーディオン #1<br>アコーディオン #1<br> アコーディオン #1<br>アコーディオン #1 </p> </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion1" href="#collapse12"> アコーディオン #2 </a> </h4> </div> <div id="collapse12" class="panel-collapse collapse"> <div class="panel-body"> <p> アコーディオン #2<br>アコーディオン #2<br> アコーディオン #2<br>アコーディオン #2 </p> </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion1" href="#collapse13"> アコーディオン #3 </a> </h4> </div> <div id="collapse13" class="panel-collapse collapse"> <div class="panel-body"> <p> アコーディオン #3<br>アコーディオン #3<br> アコーディオン #3<br>アコーディオン #3 </p> </div> </div> </div> </div><!-- panel-group --> <h3>list-item-group方式</h3> <div class="panel-group" id="accordion2"> <div class="panel panel-default"> <a class="list-group-item" data-toggle="collapse" data-parent="#accordion2" href="#collapse21"> アコーディオン #1 </a> <div id="collapse21" class="panel-collapse collapse in"> <div class="panel-body"> <p> アコーディオン #1<br>アコーディオン #1<br> アコーディオン #1<br>アコーディオン #1 </p> </div> </div><!-- panel-collapse --> </div><!-- panel --> <div class="panel panel-default"> <a class="list-group-item" data-toggle="collapse" data-parent="#accordion2" href="#collapse22"> アコーディオン #2 </a> <div id="collapse22" class="panel-collapse collapse"> <div class="panel-body"> <p> アコーディオン #2<br>アコーディオン #2<br> アコーディオン #2<br>アコーディオン #2 </p> </div> </div><!-- panel-collapse --> </div><!-- panel --> <div class="panel panel-default"> <a class="list-group-item" data-toggle="collapse" data-parent="#accordion2" href="#collapse23"> アコーディオン #3 </a> <div id="collapse23" class="panel-collapse collapse"> <div class="panel-body"> <p> アコーディオン #3<br>アコーディオン #3<br> アコーディオン #3<br>アコーディオン #3 </p> </div> </div><!-- panel-collapse --> </div><!-- panel --> </div><!-- panel-group --> </div><!-- col-6 --> <div class="col-xs-3 col-sm-3 col-md-3"> </div><!-- col-3 --> </div><!-- row --> </div><!-- container --> <script src="jquery-1.10.2.min.js"></script> <script src="bootstrap.min.js"></script> </body> </html>
ページを表示すると、デフォルト方式とlist-item-group方式が表示されます。
panelクラスを使用した場合、同一グループ内で常に1つのパネルのみを展開し、その他のパネルを折りたたんでしまうため、panelクラスからlistクラスを使ってCollapseを実装します。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <!--[if IE]> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <![endif]--> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>025-2</title> <link href="bootstrap.min.css" rel="stylesheet"> </head> <body> <header class="navbar navbar-static-top bs-docs-nav" id="top" role="banner"> </header> <div class="container"> <div class="row"> <div class="col-xs-3 col-sm-3 col-md-3"> </div><!-- col-3 --> <!-- メインコンテンツ --> <div class="col-xs-6 col-sm-6 col-md-6"> <h3>panel方式(デフォルト)</h3> <div class="panel-group" id="accordion1"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion1" href="#collapse11"> アコーディオン #1 </a> </h4> </div> <div id="collapse11" class="panel-collapse collapse in"> <div class="panel-body"> <p> アコーディオン #1<br>アコーディオン #1<br> アコーディオン #1<br>アコーディオン #1 </p> </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion1" href="#collapse12"> アコーディオン #2 </a> </h4> </div> <div id="collapse12" class="panel-collapse collapse"> <div class="panel-body"> <p> アコーディオン #2<br>アコーディオン #2<br> アコーディオン #2<br>アコーディオン #2 </p> </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion1" href="#collapse13"> アコーディオン #3 </a> </h4> </div> <div id="collapse13" class="panel-collapse collapse"> <div class="panel-body"> <p> アコーディオン #3<br>アコーディオン #3<br> アコーディオン #3<br>アコーディオン #3 </p> </div> </div> </div> </div><!-- panel-group --> <h3>List方式</h3> <div class="list-group" id="accordion3"> <a data-toggle="collapse" data-parent="#accordion3" href="#collapse31" class="list-group-item"> アコーディオン #1 </a> <div id="collapse31" class="collapse in"> <p class="list-group-item"> アコーディオン #1<br>アコーディオン #1<br> アコーディオン #1<br>アコーディオン #1 </p> </div> <a data-toggle="collapse" data-parent="#accordion3" href="#collapse32" class="list-group-item"> アコーディオン #2 </a> <div id="collapse32" class="collapse"> <p class="list-group-item"> アコーディオン #2<br>アコーディオン #2<br> アコーディオン #2<br>アコーディオン #2 </p> </div> <a data-toggle="collapse" data-parent="#accordion3" href="#collapse33" class="list-group-item"> アコーディオン #3 </a> <div id="collapse33" class="collapse"> <p class="list-group-item"> アコーディオン #3<br>アコーディオン #3<br> アコーディオン #3<br>アコーディオン #3 </p> </div> </div> </div><!-- col-6 --> <div class="col-xs-3 col-sm-3 col-md-3"> </div><!-- col-3 --> </div><!-- row --> </div><!-- container --> <script src="jquery-1.10.2.min.js"></script> <script src="bootstrap.min.js"></script> </body> </html>
ページを表示すると、デフォルト方式とList方式が表示されます。
Collapseは、コードだけでなくさまざまなユースケースが考えられます。Collapseを使用する上で注意すべき点を挙げます。
CASE | 注意点 | 概要 |
---|---|---|
1 | panel-groupとdata-parentで指定するidが一致しない場合 | data-parentで指定したidがpanel-groupのidとミスマッチの場合も、hrefがマッチすれば展開されます。 |
2 | data-toggleで指定するリンク先(href)が、存在しない場合 | 折りたたみは行われません。 |
3 | リンク先が、別のpanel-groupのidの場合 | 指定されたidのデータが折りたたまれます。 |
1行目と4行目で指定したidがミスマッチでも、3行目と8行目で指定したhrefがマッチすれば、展開されます。
<div class="panel-group" id="accordion1"> <div class="panel panel-default"> <a href="#collapse11" data-parent="#accordion100" class="list-group-item" data-toggle="collapse"> data-parent is accordion100 </a> <div id="collapse11" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div>
3行目と8行目で指定したhrefがミスマッチの場合、展開されません。
<div class="panel-group" id="accordion2"> <div class="panel panel-default"> <a href="#collapse21" data-parent="#accordion2" class="list-group-item" data-toggle="collapse"> 展開されません </a> <div id="collapse51" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div>
8行目と17行目で指定したhrefがマッチしたの場合、異なるpanel-groupであっても、マッチしたhrefが展開されます。
<div class="panel-group" id="accordion3"> <div class="panel panel-default"> <a href="#collapse31" data-parent="#accordion3" class="list-group-item" data-toggle="collapse"> Target#1 </a> <div id="collapse31" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div> <h4>panel-group: accordion4</h4> <div class="panel-group" id="accordion4"> <div class="panel panel-default"> <a href="#collapse31" data-parent="#accordion4" class="list-group-item active" data-toggle="collapse"> Target#1が展開されます </a> <div id="collapse41" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div>
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <!--[if IE]> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <![endif]--> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>025-3</title> <link href="bootstrap.min.css" rel="stylesheet"> </head> <body> <header class="navbar navbar-static-top bs-docs-nav" id="top" role="banner"> </header> <div class="container"> <div class="row"> <div class="col-xs-3 col-sm-3 col-md-3"> </div><!-- col-3 --> <!-- メインコンテンツ --> <div class="col-xs-6 col-sm-6 col-md-6"> <h3>CASE 1</h3> <h4>panel-group: accordion1</h4> <div class="panel-group" id="accordion1"> <div class="panel panel-default"> <a href="#collapse11" data-parent="#accordion100" class="list-group-item" data-toggle="collapse"> data-parent is accordion100 </a> <div id="collapse11" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div> <h3>CASE 2</h3> <h4>panel-group: accordion2</h4> <div class="panel-group" id="accordion2"> <div class="panel panel-default"> <a href="#collapse21" data-parent="#accordion2" class="list-group-item" data-toggle="collapse"> 展開されません </a> <div id="collapse51" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div> <h3>CASE 3</h3> <h4>panel-group: accordion3</h4> <div class="panel-group" id="accordion3"> <div class="panel panel-default"> <a href="#collapse31" data-parent="#accordion3" class="list-group-item" data-toggle="collapse"> Target#1 </a> <div id="collapse31" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div> <h4>panel-group: accordion4</h4> <div class="panel-group" id="accordion4"> <div class="panel panel-default"> <a href="#collapse31" data-parent="#accordion4" class="list-group-item active" data-toggle="collapse"> Target#1が展開されます </a> <div id="collapse41" class="panel-collapse collapse"> <div class="panel-body"><p>Sample 1</p></div> </div> </div> </div> </div><!-- col-6 --> <div class="col-xs-3 col-sm-3 col-md-3"> </div><!-- col-3 --> </div><!-- row --> </div><!-- container --> <script src="jquery-1.10.2.min.js"></script> <script src="bootstrap.min.js"></script> </body> </html>