Bootstrap3 の使い方(3)
作成日:2017年7月22日
関連ページ:Bootstrap4 の使い方
ドロップダウン
ドロップダウンは、ボタンやリンクなどをクリックした時に、サブメニューを開閉する JavaScript(dropdown.js)を使用した機能です。(Dropdowns)
以下は基本的な使い方です。
- ドロップダウンの機能の範囲を div 要素等で囲み、この要素に dropdown クラスを指定
- サブメニューを開閉する要素(button 要素や a 要素)に dropdown-toggle クラスと data-toggle="dropdown" 属性を指定
- サブメニューの内容(ul 要素等)に dropdown-menu クラスを指定
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true"> ドロップダウン <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> <li><a href="#">サブメニュー1</a></li> <li><a href="#">サブメニュー2</a></li> <li role="separator" class="divider"></li> <li><a href="#">サブメニュー3</a></li> </ul> </div>
キャレットの表示(▼)
▼ の表示は、caret クラスを使用します。
区切り線(セパレーター)
divider クラスを指定した li 要素を用意することで、区切り線を表示することができます。また、role 属性(role="separator")を使用してこの要素の役割を明示しています。
aria-haspopup 属性はポップアップメニューが存在するかどうかを示すための WAI-ARIA の属性で、 true を指定することで UA に対してポップアップが存在することを伝えます。
aria-labelledby 属性は要素とラベルを関連付ける WAI-ARIA 属性で、関連付けたい要素の id 属性を aria-labelledby 属性の値として指定します。(ARIA ラベルと関係性)
Bootstrap のサンプルには記述されていて、ここでは省略していますが、aria-expanded 属性は要素の開閉の状態を示すための WAI-ARIA の属性で、値には true (開いている状態)、false (閉じている状態)を指定できます。この属性はユーザーの操作によって生じる状態を表わすものなので、必要に応じて JavaScript を使って、属性値をその時々で変更します。
ドロップアップ
dropdown クラスの代わりに、dropup クラスを指定すると、開閉する際にサブメニューが上側に表示されます。 外側の要素に dropup クラスを指定する以外は、前述の例と同じです。
<div class="dropup"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true"> ドロップアップ <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu2"> <li><a href="#">サブメニュー1</a></li> <li><a href="#">サブメニュー2</a></li> <li role="separator" class="divider"></li> <li><a href="#">サブメニュー3</a></li> </ul> </div>
以下は、ドロップダウンの機能を利用して、ボタンをクリックすると画像を表示・非表示にする例です。(実用的かどうかは別です)
使い方は、前述と同じです。
- ドロップダウンの機能の範囲を div 要素等で囲み dropdown クラスを指定
- サブメニューを開閉する要素に dropdown-toggle クラスと data-toggle="dropdown" 属性を指定
- サブメニューの内容の要素に dropdown-menu クラスを指定
<div class="dropdown" id="myDD"> <button class="btn btn-success dropdown-toggle" data-toggle="dropdown" aria-haspopup="true"> 画像を表示 </button> <div class="dropdown-menu"> <img src="images/sample.jpg" class="img-responsive" alt=""> </div> </div>
画像はレスポンシブにするために、img-responsive クラスを指定しています。また、ボタンの表示を変えるために、以下の jQuery を記述しています。
ドロップダウンのイベントなどについては Dropdown/Events に記載されています。
ドロップダウンのイベントは、dropdown-menu クラスを指定した要素の親要素において発火されます。
jQuery(function($){ $('#myDD').on('shown.bs.dropdown', function () { $(this).find("button").text("画像を隠す"); }) $('#myDD').on('hidden.bs.dropdown', function () { $(this).find("button").text("画像を表示"); }) });
画像を表示させてみると、パディングやマージンが設定されていることがわかります。bootstrap.css には以下が記述されています。
.dropdown-menu { position: absolute; top: 100%; left: 0; z-index: 1000; display: none; float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; font-size: 14px; text-align: left; list-style: none; background-color: #fff; -webkit-background-clip: padding-box; background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .15); border-radius: 4px; -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); box-shadow: 0 6px 12px rgba(0, 0, 0, .175); }
a 要素を使ったドロップダウン
button 要素ではなく a 要素を使ってサブメニューを開閉する例です。
a 要素に btn と btn-default クラスを指定して、ボタンのように見せかけています。これらのクラスを指定しない場合は、通常のリンクのように表示されます。
また、a 要素に role="button" の role 属性を指定してボタンとしての役割を明示しています。
<div class="dropdown"> <a class="btn btn-default dropdown-toggle" id="dropdownMenu3" data-toggle="dropdown" role="button" aria-haspopup="true"> ドロップダウン <span class="caret"></span> </a> <ul class="dropdown-menu" aria-labelledby="dropdownMenu3"> <li><a href="#">サブメニュー1</a></li> <li><a href="#">サブメニュー2</a></li> <li role="separator" class="divider"></li> <li><a href="#">サブメニュー3</a></li> </ul> </div>
メニューにタイトルを表示
ドロップダウンメニューの項目にタイトル(header)を表示するには、リスト項目の要素(li 要素)に dropdown-header クラスを指定します。
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu4" data-toggle="dropdown" aria-haspopup="true"> ドロップダウン <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu4"> <li class="dropdown-header">タイトル1</li> <li><a href="#">サブメニュー1</a></li> <li><a href="#">サブメニュー2</a></li> <li class="dropdown-header">タイトル2</li> <li><a href="#">サブメニュー3</a></li> </ul> </div>
リンクの無効化
ドロップダウンメニューの項目を無効化するには、リスト項目の要素(li 要素)に disabled クラスを指定します。
<div class="dropdown"> <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu4" data-toggle="dropdown" aria-haspopup="true"> ドロップダウン <span class="caret"></span> </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenu4"> <li class="dropdown-header">タイトル1</li> <li><a href="#">サブメニュー1</a></li> <li><a href="#">サブメニュー2</a></li> <li class="dropdown-header">以下は無効な項目</li> <li class="disabled"><a href="#">サブメニュー3</a></li> </ul> </div>
インプットグループ
インプットグループを使って、テキスト入力欄にテキストやボタンを配置することができます。但し、インプットグループでは select 要素や textarea 要素を使うことはできません(インプットグループ)。
また、フォームグループやグリッドのクラスを直接インプットグループに指定するのは避けてください。代わりに、フォームグループやグリッドの要素の中にインプットグループをネストして使用するようにします。(グリッド配置の例)
基本的な使い方
- 配置する要素(span 要素)に input-group-addon クラスを指定します。
- テキスト入力欄(input 要素)と配置する要素(input-group-addon クラスを指定した要素)を、input-group クラスを指定した div 要素で囲みます。
- 配置する要素(input-group-addon クラスを指定した要素)の位置は出現順(input 要素の右か左)に表示されます。
但し、1つのインプットグループ内に複数のフォームコントロール要素(form-control)を含めることはできません。また、左右どちらか側に複数のアドオンを配置することはできません。
以下は原文
We do not support multiple form-controls in a single input group.
We do not support multiple add-ons (.input-group-addon or .input-group-btn) on a single side.
<div class="input-group"> <span class="input-group-addon">Name </span> <input type="text" class="form-control" placeholder="Username"> </div> <div class="input-group"> <input type="text" class="form-control" placeholder="Recipient's username" aria-describedby="basic-addon2"> <span class="input-group-addon" id="basic-addon2">@example.com</span> </div> <div class="input-group"> <span class="input-group-addon">$</span> <input type="text" class="form-control" aria-label="Amount (to the nearest dollar)"> <span class="input-group-addon">.00</span> </div> <label for="basic-url">Your vanity URL</label> <div class="input-group"> <span class="input-group-addon" id="basic-addon3">https://example.com/users/</span> <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3"> </div>
サイズの調整
input-group クラスを指定した div 要素に、btn-group-lg(大)または btn-group-sm(小)クラスを指定し、サイズを調整します。
<div class="input-group input-group-lg"> <span class="input-group-addon" id="sizing-addon1">大きなサイズ</span> <input type="text" class="form-control" placeholder="input-group-lg(大)" aria-describedby="sizing-addon1"> </div> <div class="input-group"> <span class="input-group-addon" id="sizing-addon2">通常のサイズ</span> <input type="text" class="form-control" placeholder="指定なし" aria-describedby="sizing-addon2"> </div> <div class="input-group input-group-sm"> <span class="input-group-addon" id="sizing-addon3">小さなサイズ</span> <input type="text" class="form-control" placeholder="input-group-sm(小)" aria-describedby="sizing-addon3"> </div>
チェックボックスとラジオボタン
テキストの代わりにチェックボックスやラジオボタンをインプットグループに配置することができます。チェックボックスやラジオボタンを input-group-addon クラスを指定した span 要素で囲んで配置します。
<div class="input-group"> <span class="input-group-addon"> <input type="checkbox" aria-label="..."> </span> <input type="text" class="form-control" aria-label="..."> </div> <div class="input-group"> <input type="text" class="form-control" aria-label="..."> <span class="input-group-addon"> <input type="checkbox" aria-label="..."> </span> </div> <div class="input-group"> <span class="input-group-addon"> <input type="radio" aria-label="..."> </span> <input type="text" class="form-control" aria-label="..."> </div>
グリッド配置の例
グリッドのクラスを直接インプットグループに指定するのではなく、グリッドの要素(col-xx-n クラスを指定した div 要素)の中にインプットグループをネストして使用するようにします。
<div class="row"> <div class="col-lg-6"> <div class="input-group"> <span class="input-group-addon"> <input type="checkbox" aria-label="..."> </span> <input type="text" class="form-control" aria-label="..."> </div><!-- /input-group --> </div><!-- /.col-lg-6 --> <div class="col-lg-6"> <div class="input-group"> <span class="input-group-addon"> <input type="radio" aria-label="..."> </span> <input type="text" class="form-control" aria-label="..."> </div><!-- /input-group --> </div><!-- /.col-lg-6 --> </div><!-- /.row -->
タブ切り替え
Bootstrap には、JavaScript を利用したタブ切り替え機能が用意されています。(Togglable tabs)
タブの作成は、「タブ形式ナビゲーション」の作成と同じです。
ul 要素に nav 及び nav-tabs クラスを指定し、li 要素と a 要素でリンクを作成します。選択された状態で表示する項目には li 要素に active のクラスを指定します。また、ul 要素に role="tablist" 属性を指定します。
各タブをクリックした時に、表示内容を切り替えるには、li 要素の中の a 要素に data-toggle="tab" の属性を指定します。また、a 要素に role="tab" 属性も指定します。
a 要素の href 属性には、# と表示内容が記述されている div 要素の id の値を指定します。
各タブの表示内容は、 class="tab-content" を指定した div 要素で囲みます。
その中に class="tab-pane を指定した div 要素を入れて、各タブの表示内容を記述し、それぞれの div 要素に id 属性(a 要素の href 属性に対応する値)を指定します。また、最初から表示する内容に active クラスを追加します。この div 要素には、 role="tabpanel" 属性も指定します。
<!-- Nav tabs --> <ul class="nav nav-tabs" role="tablist"> <li role="presentation" class="active"> <a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a> </li> <li role="presentation"> <a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a> </li> <li role="presentation"> <a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Messages</a> </li> </ul> <!-- Tab panes --> <div class="tab-content"> <div role="tabpanel" class="tab-pane active" id="home"> <h3>Home</h3> <p>Lorem ipsum dolor sit amet...</p> </div> <div role="tabpanel" class="tab-pane" id="profile"> <h3>Profile</h3> <p>Corporis, modi, illum, at ...</p> </div> <div role="tabpanel" class="tab-pane" id="messages"> <h3>Messages</h3> <p>Nesciunt, quibusdam saepe fuga...</p> </div> </div>
aria-controls 属性は、その要素が値(id 名)に指定した要素を制御することを示す属性です。(参考:WAI-ARIAを意識したタブパネルのマークアップを考えてみる)
Home
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor, recusandae, non, possimus enim doloremque ullam adipisci voluptatibus aut laboriosam cumque quam quasi voluptas error quis nulla necessitatibus officia maiores consectetur.
Profile
Corporis, modi, illum, at blanditiis fugiat libero laborum esse est aliquam et maiores eum doloremque consequuntur reiciendis vel nostrum ab sit magnam omnis eius fuga qui molestias nemo! Nostrum, vero.
Messages
Nesciunt, quibusdam saepe fuga asperiores officiis beatae quaerat quasi quos placeat quam vel laudantium ex odio similique earum porro harum animi sequi magni cum! Porro excepturi ab aliquid quibusdam nisi.
他のプラグインとの競合
スムーズスクロールなどを使っている場合、このタブ切り替え機能と競合する可能性があります。もし、タブ切り替え機能がうまく働かない場合は、チェックしてみるといいかも知れません。
このサイトではスムーズスクロールの機能を $('a[href^=#]') を使って記述していますが、これが競合していたため、最初はタブ切り替えが機能しませんでした。以下のように、not() を使ってタブ機能で使用する a 要素の href 属性をスムーズスクロールの対象外とすることで、機能するようになりました。
$('a[href^=#]').not('.nav.nav-tabs a, .nav.nav-pills a').click(function(){・・・
「ピル形式ナビゲーション」でも、同様の機能を実現することができます。
その場合は、 nav 及び nav-pills クラスでピル形式ナビゲーションを作成し、li 要素の中の a 要素に data-toggle="pill" 属性を指定します。その他は前述のタブ切り替えと同じです。
<!-- Nav tabs --> <ul class="nav nav-pills" role="tablist"> <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="pill">Home</a></li> <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="pill">Profile</a></li> <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="pill">Messages</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> <div role="tabpanel" class="tab-pane active" id="home"> <h3>Home</h3> <p>Lorem ipsum dolor sit amet...</p> </div> <div role="tabpanel" class="tab-pane" id="profile"> <h3>Profile</h3> <p>Corporis, modi, illum, at ...</p> </div> <div role="tabpanel" class="tab-pane" id="messages"> <h3>Messages</h3> <p>Nesciunt, quibusdam saepe fuga...</p> </div> </div>
Home
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor, recusandae, non, possimus enim doloremque ullam adipisci voluptatibus aut laboriosam cumque quam quasi voluptas error quis nulla necessitatibus officia maiores consectetur.
Profile
Corporis, modi, illum, at blanditiis fugiat libero laborum esse est aliquam et maiores eum doloremque consequuntur reiciendis vel nostrum ab sit magnam omnis eius fuga qui molestias nemo! Nostrum, vero.
Messages
Nesciunt, quibusdam saepe fuga asperiores officiis beatae quaerat quasi quos placeat quam vel laudantium ex odio similique earum porro harum animi sequi magni cum! Porro excepturi ab aliquid quibusdam nisi.
ドロップダウンの追加
ドロップダウンメニューを追加した場合のタブ切り替えの例です。構造がわかりやすいように aria-xxxx 属性やそれに関連する id 属性を省略してあります。
<ul class="nav nav-tabs"> <li class="active" role="presentation"> <a id="home-tab" href="#home" role="tab" data-toggle="tab">Home</a> </li> <li role="presentation"> <a id="profile-tab" href="#profile" role="tab" data-toggle="tab">Profile</a> </li> <li class="dropdown" role="presentation"> <a id="myTabDrop1" class="dropdown-toggle" href="#" data-toggle="dropdown"> Dropdown <span class="caret"></span> </a> <ul class="dropdown-menu"> <li><a href="#dropdown1" role="tab" data-toggle="tab">Events</a></li> <li><a href="#dropdown2" role="tab" data-toggle="tab">News</a></li> </ul> </li> </ul> <div class="tab-content"> <div id="home" class="tab-pane active" role="tabpanel"> <p>Lorem ipsum dolor sit amet...</p> </div> <div id="profile" class="tab-pane" role="tabpanel"> <p>Odit quos sint inventore ...</p> </div> <div id="dropdown1" class="tab-pane" role="tabpanel"> <p>Quod, inventore, similique...</p> </div> <div id="dropdown2" class="tab-pane" role="tabpanel"> <p>Fugit, velit architecto non...</p> </div> </div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ad, nam, ea quam placeat nihil quisquam rem ullam! Eius, iste, fugit, officia provident a aspernatur iusto enim veritatis nihil quam dolorum!
Odit quos sint inventore eaque. Ut, eaque, quidem, ducimus, ipsa corporis aliquam velit minus perferendis facilis cumque voluptatibus distinctio provident commodi ab vitae ullam magni. Corporis praesentium molestias explicabo voluptatem?
Quod, inventore, similique illum ipsum deleniti reiciendis dicta corporis minus voluptatem qui blanditiis ipsa corrupti porro? Molestiae, laboriosam impedit fuga libero molestias quisquam temporibus cum veniam necessitatibus totam laudantium laborum.
Fugit, velit architecto non voluptatem dolores reiciendis aspernatur veritatis totam dicta commodi possimus dignissimos fugiat neque sunt itaque! Ad, eligendi quaerat minus sint non doloribus provident sed totam. Quos, veniam.
以下は、 aria-xxxx 属性などを省略していないコードです。aria-labelledby 属性は、その要素をラベル付けする要素を id 属性で特定します。
<ul class="nav nav-tabs" role="tablist"> <li class="active" role="presentation"> <a id="home-tab" href="#home" role="tab" data-toggle="tab" aria-controls="home">Home</a> </li> <li role="presentation"> <a id="profile-tab" href="#profile" role="tab" data-toggle="tab" aria-controls="profile">Profile</a> </li> <li class="dropdown" role="presentation"> <a id="myTabDrop1" class="dropdown-toggle" href="#" data-toggle="dropdown" aria-controls="myTabDrop1-contents"> Dropdown <span class="caret"></span> </a> <ul id="myTabDrop1-contents" class="dropdown-menu" aria-labelledby="myTabDrop1"> <li> <a id="dropdown1-tab" href="#dropdown1" role="tab" data-toggle="tab" aria-controls="dropdown1">Events</a> </li> <li> <a id="dropdown2-tab" href="#dropdown2" role="tab" data-toggle="tab" aria-controls="dropdown2">News</a> </li> </ul> </li> </ul> <div id="myTabContent" class="tab-content"> <div id="home" class="tab-pane active" role="tabpanel" aria-labelledby="home-tab"> <p>Lorem ipsum dolor sit amet...</p> </div> <div id="profile" class="tab-pane" role="tabpanel" aria-labelledby="profile-tab"> <p>Odit quos sint inventore ...</p> </div> <div id="dropdown1" class="tab-pane" role="tabpanel" aria-labelledby="dropdown1-tab"> <p>Quod, inventore, similique...</p> </div> <div id="dropdown2" class="tab-pane" role="tabpanel" aria-labelledby="dropdown2-tab"> <p>Fugit, velit architecto non ....</p> </div> </div>
フェード効果
タブやピルをクリックして切り替える際に、フェード効果を加えることができます。その場合、tab-pane クラスを指定している div 要素に、fade というクラスを追加します。また、最初から表示される内容の div 要素(.active)には in というクラスを指定する必要があります。
<!-- Tab panes --> <div class="tab-content"> <div role="tabpanel" class="tab-pane active fade in" id="home"> <h3>Home</h3> <p>Lorem ipsum dolor sit amet...</p> </div> <div role="tabpanel" class="tab-pane fade" id="profile"> <h3>Profile</h3> <p>Corporis, modi, illum, at ...</p> </div> <div role="tabpanel" class="tab-pane fade" id="messages"> <h3>Messages</h3> <p>Nesciunt, quibusdam saepe fuga...</p> </div> </div>
Home
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor, recusandae, non, possimus enim doloremque ullam adipisci voluptatibus aut laboriosam cumque quam quasi voluptas error quis nulla necessitatibus officia maiores consectetur.
Profile
Corporis, modi, illum, at blanditiis fugiat libero laborum esse est aliquam et maiores eum doloremque consequuntur reiciendis vel nostrum ab sit magnam omnis eius fuga qui molestias nemo! Nostrum, vero.
Messages
Nesciunt, quibusdam saepe fuga asperiores officiis beatae quaerat quasi quos placeat quam vel laudantium ex odio similique earum porro harum animi sequi magni cum! Porro excepturi ab aliquid quibusdam nisi.
イベント
タブのイベントについては Tab/Events に記載されています。
タブのイベントは、タブメニューの a 要素(a[data-toggle="tab"])がクリックされた際に以下の順序で発火します。
- hide.bs.tab (現在のアクティブなタブで発生)
- show.bs.tab (これから表示されるタブで発生)
- hidden.bs.tab (以前のアクティブなタブで発生, hide.bs.tab event の対象のタブ)
- shown.bs.tab (新しく表示されたタブで発生, show.bs.tab event の対象のタブ)
また、event.target は、その時にアクティブなタブを表し、event.relatedTargetは、(もしあれば)以前アクティブだったタブを表します。
以下は、実用的ではありませんが、タブが切り替わったら、表示される内容の中の p 要素の背景色を変更する例です。
$(e.target).attr("href") は a 要素の href 属性なので、$($(e.target).attr("href")) で表示される div 要素(tab-pane クラス)になります。
jQuery(function($){ $('#tab_sample a[data-toggle="tab"]').on('shown.bs.tab', function (e) { $($(e.target).attr("href")).find("p").css("background-color", "#9EE4F0") .animate({ backgroundColor: '#fff', }, 1000); }) });
<div id="tab_sample"> <!-- Nav tabs --> <ul class="nav nav-tabs" role="tablist"> <li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Home</a></li> <li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Profile</a></li> <li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">Messages</a></li> </ul> <!-- Tab panes --> <div class="tab-content"> <div role="tabpanel" class="tab-pane active" id="home"> <h3 class="noindex">Home</h3> <p>Lorem ipsum dolor sit amet...</p> </div> <div role="tabpanel" class="tab-pane" id="profile"> <h3 class="noindex">Profile</h3> <p>Corporis, modi, illum, at...</p> </div> <div role="tabpanel" class="tab-pane" id="messages"> <h3 class="noindex">Messages</h3> <p>Nesciunt, quibusdam saepe fuga...</p> </div> </div> </div>
Home
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor, recusandae, non, possimus enim doloremque ullam adipisci voluptatibus aut laboriosam cumque quam quasi voluptas error quis nulla necessitatibus officia maiores consectetur.
Profile
Corporis, modi, illum, at blanditiis fugiat libero laborum esse est aliquam et maiores eum doloremque consequuntur reiciendis vel nostrum ab sit magnam omnis eius fuga qui molestias nemo! Nostrum, vero.
Messages
Nesciunt, quibusdam saepe fuga asperiores officiis beatae quaerat quasi quos placeat quam vel laudantium ex odio similique earum porro harum animi sequi magni cum! Porro excepturi ab aliquid quibusdam nisi.
ページネーションとページャー
Bootstrap には、ページネーションやページャーを作成するクラスが用意されています。(Pagination)
ページネーション
ページネーションを作成するには、nav 要素内に pagination クラスを指定した ul 要素を配置し、li 要素と a 要素でリンクを記述します。
「前へ戻る」の記号は、« を使用し、「次へ進む」の記号は » 特殊文字を使用しています。また、aria-label を使ってラベルを設定しています。
また、以下の例ではページネーションを中央揃えで表示するために、 nav 要素に text-center クラスを指定しています。
<nav class="text-center" aria-label="ページナビゲーション"> <ul class="pagination"> <li> <a href="#" aria-label="前のページへ"> <span aria-hidden="true">«</span> </a> </li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="次のページへ"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav>
現在のページとして表示
li 要素に active クラスを指定すると、現在のページとして表示(青色に表示)されます。その際には、リンク機能を無効にするために a 要素の代わりに span 要素を使用します。
<nav aria-label="ページナビゲーション"> <ul class="pagination"> <li> <a href="#" aria-label="前のページへ"> <span aria-hidden="true">«</span> </a> </li> <li><a href="#">2</a></li> <li><a href="#">2</a></li> <li class="active"><span>3</span></li><!--現在のページ--> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="次のページへ"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav>
リンクの無効化
リンクを無効化するには、リンク項目の li 要素に、disabled クラスをを指定します。その際には、リンク機能を無効にするために a 要素の代わりに span 要素を使用します。
<nav aria-label="ページナビゲーション"> <ul class="pagination"> <li class="disabled"><!--リンク無効化--> <span aria-label="前のページへ"> <span aria-hidden="true">«</span> </span> </li> <li class="active"><span>1</span></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="次のページへ"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav>
ページネーションのサイズ
ページネーションのサイズを大きくするには pagination-lg クラスを、サイズを小さくするには pagination-sm クラスを ul 要素に追加指定します。
<nav aria-label="..."><ul class="pagination pagination-lg">...</ul></nav> <nav aria-label="..."><ul class="pagination">...</ul></nav> <nav aria-label="..."><ul class="pagination pagination-sm">...</ul></nav>
ページャー
ページャーを作成するには、nav 要素内に pager クラスを指定した ul 要素を配置し、li 要素と a 要素でリンクを記述します。
<nav aria-label="ページャー"> <ul class="pager"> <li><a href="#">Previous</a></li> <li><a href="#">Next</a></li> </ul> </nav>
左右に表示
ページャーのボタンを左右に配置するには、左側に表示する li 要素に previous クラスを、右側に表示する li 要素に next クラスを指定します。
<nav aria-label="ページャー"> <ul class="pager"> <li class="previous"><a href="#">Previous</a></li> <li class="next"><a href="#">Next</a></li> </ul> </nav>
リンクの無効化
リンクを無効化するには、リンク項目の li 要素に、disabled クラスをを指定します。その際には、リンク機能を無効にするために a 要素の代わりに span 要素を使用します。
<nav aria-label="ページャー"> <ul class="pager"> <li class="disabled"><span>Previous</span></li> <li><a href="#">Next</a></li> </ul> </nav>
ラベル
ラベルを作成するには、span 要素に label クラスと label-default クラスを指定します。ラベルの大きさはその親要素に合わせて自動的に調整(75% の大きさ)されます。bootstrap.css には以下が設定されています。(Labels)
.label { display: inline; padding: .2em .6em .3em; font-size: 75%; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: .25em; }
<p>Label Example <span class="label label-default">New</span></p>
Label Example New
カラーバリエーション
label-default クラスの代わりに、label-primary や label-success 等を指定することでラベルの色を変更することができます。
<span class="label label-default">Default</span> <span class="label label-primary">Primary</span> <span class="label label-success">Success</span> <span class="label label-info">Info</span> <span class="label label-warning">Warning</span> <span class="label label-danger">Danger</span>
Default Primary Success Info Warning Danger
バッジ
バッジを作成するには、span 要素に badge クラスを指定してします。(Badges)
span 要素内を空にすると、CSS の :empty を使ってバッジを表示しないようになっていますが、Internet Explorer 8 以下ではサポートされていないため、表示されてしまいます。
<span class="badge">17</span> <span class="badge"></span>
17
bootstrap.css には以下が設定されています(一部抜粋)。
.badge { display: inline-block; min-width: 10px; padding: 3px 7px; font-size: 12px; font-weight: bold; line-height: 1; color: #fff; text-align: center; white-space: nowrap; vertical-align: middle; background-color: #777; border-radius: 10px; } .badge:empty { display: none; } .btn .badge { position: relative; top: -1px; }
a 要素や button 要素内等で使用することができます。
<a href="#">Inbox <span class="badge">37</span></a> <button class="btn btn-primary" type="button"> Messages <span class="badge">5</span> </button>
ページヘッダー
ページヘッダーは見出し等に利用できる装飾で、文字の下にグレイの線を描画する機能です。(Page header)
使い方は page-header クラスを指定した div 要素で、見出し等の要素を囲みます。(見出し要素に直接 page-header クラスを指定しても機能します)
<div class="page-header"> <h3>Example page header <small>Subtext for header</small></h3> </div>
Example page header Subtext for header
bootstrap.css には以下が設定されています。
.page-header { padding-bottom: 9px; margin: 40px 0 20px; border-bottom: 1px solid #eee; }
サムネイル
Bootstrap にはグリッドを使ったレスポンシブ対応のサムネイル用のクラスが用意されています。(Thumbnails)
使い方は、thumbnail クラスを指定した a 要素等で、img 要素を囲みます。以下の例ではリンク先を画像ファイルにしていますが、リンク先は任意です。
<div class="row"> <div class="col-xs-6 col-md-3"> <a href="images/sample.jpg" class="thumbnail"> <img src="images/sample.jpg" alt=""> </a> </div> ... </div>
カスタム・コンテンツ(囲み記事)
角丸の枠線で囲み記事を作成することもできます。カスタム・コンテンツ(囲み記事)を作成するには、div 要素に thumbnail というクラスを指定し、その要素の中に見出しや段落、ボタンなどを含めることができます。
このクラスには、画像が枠線内に収まるように縮小表示されるスタイルなども含まれているため、画像を含む囲み記事などに利用できます。
また、見出しや記事などを caption というクラスを指定した div 要素で囲むと適切な余白を確保できます。
<div class="row"> <div class="col-sm-6 col-md-4"> <div class="thumbnail"> <img src="images/sample.jpg" alt="..."> <div class="caption"> <h3>Thumbnail label</h3> <p>...</p> <p><a href="#" class="btn btn-primary" role="button">Button</a> <a href="#" class="btn btn-default" role="button">Button</a></p> </div> </div> </div> ... </div>
bootstrap.css には以下が設定されています。
.thumbnail { display: block; padding: 4px; margin-bottom: 20px; line-height: 1.42857143; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; -webkit-transition: border .2s ease-in-out; -o-transition: border .2s ease-in-out; transition: border .2s ease-in-out; } .thumbnail > img, .thumbnail a > img { margin-right: auto; margin-left: auto; } a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { border-color: #337ab7; } .thumbnail .caption { padding: 9px; color: #333; }
アラート
アラートはメッセージの表示等に利用できるスタイルです。アラートを作成するには、div 要素で全体を囲み、この div 要素に alert クラスとアラートの色を指定するクラス(alert-xxxx)を指定します。(Alerts)
ラベルなどのような、デフォルトのグレイの色のアラートはありません。以下の4種類からコンテキストに合った色を選択します。
<div class="alert alert-success" role="alert">alert-success</div> <div class="alert alert-info" role="alert">alert-info</div> <div class="alert alert-warning" role="alert">alert-warning</div> <div class="alert alert-danger" role="alert">alert-danger</div>
閉じられるアラート
アラートを閉じて非表示にする機能も用意されています。この機能を使用するには、alert クラスを指定した div 要素に alert-dismissible クラスを追加します。
また、閉じるボタンは button 要素を使い、close クラス及び data-dismiss="alert" 属性(JavaScript が正しく機能するための Bootstrap 独自の属性)を指定します。×印は、× 特殊文字を使用します。
<div class="alert alert-success alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> <strong>成功!</strong> 完了しました。 </div>
アラート内のリンク
アラート内にリンク(a 要素)を設置する場合、a 要素に alert-link クラスを指定するとアラートの色に合ったリンクの色になります。また、リンク部分が太字で表示されます。
<div class="alert alert-success" role="alert"> <a href="#" class="alert-link">Success Link</a> sample. </div> <div class="alert alert-info" role="alert"> <a href="#" class="alert-link">Info Link</a> sample. </div> <div class="alert alert-warning" role="alert"> <a href="#" class="alert-link">Warning Link</a> sample. </div> <div class="alert alert-danger" role="alert"> <a href="#" class="alert-link">Danger Link</a> sample. </div>
リストグループ
リストグループはナビゲーションなど幅広く利用できる表示形式です。(List group)
基本的なリストグループは、ul 要素に list-group クラスを指定し、li 要素に list-group-item クラスを指定してリストを作成します。
リストグループは親要素の幅に合わせて表示されるため、必要に応じて CSS やグリッドシステムで幅を調整します。
<ul class="list-group"> <li class="list-group-item">Manhattan</li> <li class="list-group-item">Brooklyn</li> <li class="list-group-item">Queens</li> <li class="list-group-item">Bronx</li> <li class="list-group-item">Staten Island</li> </ul>
- Manhattan
- Brooklyn
- Queens
- Bronx
- Staten Island
リンク付きリストグループ
リンク付き(a 要素を使った)リストグループは、div 要素と a 要素で作成します。その場合、div 要素に list-group クラスを指定し、 a 要素に list-group-item クラスを指定します。
また、現在のページを示す active クラスや、クリックできない(無効)を示す disabled クラスを指定することができます。
<div class="list-group"> <a href="#" class="list-group-item active"> Manhattan </a> <a href="#" class="list-group-item">Brooklyn</a> <a href="#" class="list-group-item">Queens</a> <a href="#" class="list-group-item">Bronx</a> <a href="#" class="list-group-item disabled">Staten Island</a> </div>
ボタンを使ったリストグループ
button 要素を使ってもリストグループを作成することができます。その場合、div 要素に list-group クラスを指定し、 button 要素に list-group-item クラスを指定します。
但し、その際に button 要素に btn クラスを指定してはいけません。
<div class="list-group"> <button type="button" class="list-group-item"> Manhattan</button> <button type="button" class="list-group-item">Brooklyn</button> <button type="button" class="list-group-item">Queens</button> <button type="button" class="list-group-item">Bronx</button> <button type="button" class="list-group-item">Staten Island</button> </div>
バッジの挿入
どのタイプのリストグループでも、リスト項目(list-group-item クラスの要素)にバッジを配置することができます。配置したバッジは自動的に右寄せで表示されます。
<ul class="list-group"> <li class="list-group-item"><span class="badge">14</span>Manhattan</li> <li class="list-group-item">Brooklyn</li> <li class="list-group-item">Queens</li> <li class="list-group-item"><span class="badge">7</span>Bronx</li> <li class="list-group-item">Staten Island</li> </ul>
- 14Manhattan
- Brooklyn
- Queens
- 7Bronx
- Staten Island
コンテクスチュアルカラー
リスト項目(list-group-item クラスの要素)に list-group-item-success 等のコンテクスチュアルカラーのクラスを指定することで、色をつけることができます。
<ul class="list-group"> <li class="list-group-item list-group-item-success">Manhattan</li> <li class="list-group-item list-group-item-info">Brooklyn</li> <li class="list-group-item list-group-item-warning">Queens</li> <li class="list-group-item list-group-item-danger">Bronx</li> <li class="list-group-item">Staten Island</li> </ul>
- Manhattan (success)
- Brooklyn (info)
- Queens (warning)
- Bronx (danger)
- Staten Island
カスタムコンテンツ
リストの各項目を見出しと本文で構成するリストグループを作成することができます。
その場合、見出しとなる要素(h1 ~ h6 要素等)に list-group-item-heading クラスを、本文となる要素(p 要素等)に list-group-item-text クラスを指定します。
h1 ~ h6 要素や p 要素以外の要素を使って、見出しと本文を作成することもできます。
<div class="list-group"> <a class="list-group-item" href="#"> <h4 class="list-group-item-heading">New York</h4> <p class="list-group-item-text">Lorem ipsum dolor sit amet</p> <p class="list-group-item-text"><span class="glyphicon glyphicon-earphone" aria-hidden="true"></span> 212-345-6789</p> </a> <a class="list-group-item active" href="#"> <h4 class="list-group-item-heading">Los Angels</h4> <p class="list-group-item-text">Consectetur adipisicing elit</p> .... </a> <a class="list-group-item" href="#"> <h4 class="list-group-item-heading">Houston</h4> <p class="list-group-item-text">Officia provident a aspernatur</p> .... </a> </div>
パネル
パネルは、ヘッダー、本文、フッターで構成される囲み記事を作成するスタイル設定です。(Panels)
パネルを作成するには、panel と panel-default クラスを指定した div 要素で全体を囲みます。panel クラスはボーダーとパディングを設定します。
<div class="panel panel-default"> <div class="panel-body"> Basic panel example </div> </div>
panel と panel-default クラスを指定した div 要素の中に、必要に応じて以下の要素を配置します。
- ヘッダーとなる panel-heading クラスを指定した div 要素
- 本文となる panel-body クラスを指定した div 要素
- フッターとなる panel-footer クラスを指定した div 要素
ヘッダー内で、h1~h6 要素を使用する場合は、h1~h6 要素に panel-title クラスを指定すると、見出しをパネルタイトルのスタイルに合わせて表示できます。
<div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Panel title</h3> </div> <div class="panel-body"> Panel content </div> <div class="panel-footer"> Panel footer </div> </div>
Panel title
カラー
前述の例では、外側の div 要素に panel-default クラスを指定しましたが、以下のようなクラスを指定することで、パネルのヘッダーや枠線の色(コンテクスチュアルカラー)を変更することができます。
- panel-primary
- panel-success
- panel-info
- panel-warning
- panel-danger
<div class="panel panel-primary"> <div class="panel-heading">Panel title</div> <div class="panel-body">Panel content</div> </div> <div class="panel panel-success"> <div class="panel-heading">Panel title</div> <div class="panel-body">Panel content</div> </div> <div class="panel panel-info"> <div class="panel-heading">Panel title</div> <div class="panel-body">Panel content</div> </div> <div class="panel panel-warning"> <div class="panel-heading">Panel title</div> <div class="panel-body">Panel content</div> </div> <div class="panel panel-danger"> <div class="panel-heading">Panel title</div> <div class="panel-body">Panel content</div> </div>
表やリストグループの表示
パネル内に表(テーブル)やリストグループを含ませることができます。
表を含んだパネル
ボーダー(枠線)なしの表をパネル内に挿入し、表示することができます。表には table クラスを指定する必要があります。
以下の例はレスポンシブ対応にするために、表を table-responsive クラスの div 要素で囲んでいます。
<div class="panel panel-default"> <!-- Default panel contents --> <div class="panel-heading">Panel heading</div> <div class="panel-body"> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p> </div> <!-- Table --> <div class="table-responsive"> <table class="table"> <tr> <th>画面サイズ</th> <th>{prefix}</th> <th>指定方法(n は数値)</th> </tr> <tr> <td>モバイル <br> (768px未満)</td> <td>xs エキストラスモール</td> <td>col-xs-n</td> </tr> <tr> <td>タブレット<br> (768px以上、992px未満)</td> <td>sm スモール</td> <td>col-sm-n</td> </tr> ・・・中略・・・ </table> </div> </div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
画面サイズ | {prefix} | 指定方法(n は数値) |
---|---|---|
モバイル (768px未満) |
xs エキストラスモール | col-xs-n |
タブレット (768px以上、992px未満) |
sm スモール | col-sm-n |
デスクトップ (992px以上、1200px未満) |
md ミディアム | col-md-n |
デスクトップ (1200px以上) |
lg ラージ | col-lg-n |
以下のように本文(panel-body クラスを指定した div 要素)を省略したり、フッターを追加することもできます。
<div class="panel panel-default"> <div class="panel-heading">Panel heading</div> <!-- Table --> <div class="table-responsive"> <table class="table"> <tr> <th>画面サイズ</th> <th>{prefix}</th> <th>指定方法(n は数値)</th> </tr> <tr> <td>モバイル <br> (768px未満)</td> <td>xs エキストラスモール</td> <td>col-xs-n</td> </tr> ・・・中略・・・ </table> </div> <div class="panel-footer"> Panel footer </div> </div>
画面サイズ | {prefix} | 指定方法(n は数値) |
---|---|---|
モバイル (768px未満) |
xs エキストラスモール | col-xs-n |
タブレット (768px以上、992px未満) |
sm スモール | col-sm-n |
デスクトップ (992px以上、1200px未満) |
md ミディアム | col-md-n |
デスクトップ (1200px以上) |
lg ラージ | col-lg-n |
リストグループを含んだパネル
パネルにリストグループを挿入して表示することもできます。
<div class="panel panel-default"> <!-- Default panel contents --> <div class="panel-heading">Panel heading</div> <div class="panel-body"> <p>Panel Body ......</p> </div> <!-- List group --> <ul class="list-group"> <li class="list-group-item">Manhattan</li> <li class="list-group-item">Brooklyn</li> <li class="list-group-item">Queens</li> <li class="list-group-item">Bronx</li> <li class="list-group-item">Staten Island</li> </ul> </div>
Panel Body ......
- Manhattan
- Brooklyn
- Queens
- Bronx
- Staten Island
アコーディオン(Collapse)
Collapse は、アコーディオンなどのように、折りたたみ式にコンテンツを開閉できる機能です。
a 要素を使った Collapse
a 要素で開閉する場合は、a 要素に data-toggle="collapse" 属性を指定し、href 属性に表示したり折り畳んだりするコンテンツの id 属性や class 属性の値を指定します。
表示したり折り畳んだりするコンテンツには id 属性と collapse クラスを指定します。
以下の例では、コンテンツの div 要素に well クラス(Wells)を指定して背景色のついた囲み記事のような表示にしています。
<p> <a class="btn btn-primary" role="button" data-toggle="collapse" href="#collapseExample1" aria-expanded="false" aria-controls="collapseExample1">a 要素 href 属性</a> </p> <div class="collapse" id="collapseExample1"> <div class="well">Lorem ipsum dolor sit amet.....</div> </div>
button 要素を使った Collapse
button 要素で開閉する場合は、button 要素に data-toggle="collapse" 属性を指定し、data-target 属性に表示したり折り畳んだりするコンテンツの id 属性や class 属性の値を指定します。
表示したり折り畳んだりするコンテンツには id 属性と collapse クラスを指定します。
<p> <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample2" aria-expanded="false" aria-controls="collapseExample2">button 要素 data-target 属性</button> </p> <div class="collapse" id="collapseExample2"> <div class="well">Odit quos sint inventore eaque.....</div> </div>
aria-expanded 属性
aria-expanded 属性は要素の開閉の状態を示すための WAI-ARIA の属性で、値には true (開いている状態)または false (閉じている状態) を指定することができます。Collapse の機能を使う場合は、この属性を指定することが推奨されています。値はユーザーの操作に伴い Bootstrap のスクリプトで自動的に変更されます。
最初から表示されている状態にするには、表示したり折り畳んだりするコンテンツに collapse と in クラスを指定します。その場合、aria-expanded 属性の値には true を指定します。
<p> <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample3" aria-expanded="true" aria-controls="collapseExample3">初期状態:表示</button> </p> <div class="collapse in" id="collapseExample3"> <div class="well">Quod, inventore, similique. ....</div> </div>
イベント
Collapse のイベントについては Collapse/Events に記載されています。Collapse のイベントは、collapse クラスを指定した要素において発火されます。
以下はイベントを利用して、ボタンの文字列を変更する例です。
$('#collapseExample').on('show.bs.collapse', function () { $('[data-target="#collapseExample"]').text("隠す"); }) $('#collapseExample').on('hide.bs.collapse', function () { $('[data-target="#collapseExample"]').text("表示する"); })
<p> <button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">表示する</button> </p> <div class="collapse" id="collapseExample"> <div class="well">Odit quos sint inventore eaque....</div> </div>
アコーディオンパネル
パネルと Collapse を使うとアコーディオンのように開閉するパネルを作成することができます。
panel panel-default や panel-heading(ヘッダー)、panel-body (本文)クラス等を指定して複数のパネルを作成します。
panel-group クラスと id 属性を指定した div 要素で全体を囲み、パネルをグループ化します。id 属性で指定した値は、後で data-parent 属性の値として指定します。
各パネルの見出しを a 要素で囲み、この a 要素に以下を指定します。
- data-toggle="collapse" 属性
- data-parent 属性:値は panel-group クラスを指定した div 要素の id 属性の値
- href 属性:値は見出しがクリックされた時に表示する内容の div 要素(panel-body クラスの div 要素を囲む div 要素)の id 属性の値
- aria-expanded 属性:値は表示する内容が表示されている場合は true、非表示の場合は false
panel-body クラスの div 要素を囲む div 要素に、panel-collapse と collapse クラス、前述の href 属性の値となる id 属性を指定します。また、この要素が初期状態で表示されている場合は、更に in クラスを指定します。
<div class="panel-group" id="accordion1" role="tablist" aria-multiselectable="true"> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="headingOne"> <h4 class="panel-title"> <a role="button" data-toggle="collapse" data-parent="#accordion1" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> パネル1 </a> </h4> </div> <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne"> <div class="panel-body"> Lorem ipsum dolor sit amet... </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="headingTwo"> <h4 class="panel-title"> <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion1" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"> パネル2 </a> </h4> </div> <div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo"> <div class="panel-body"> Odit quos sint inventore... </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="headingThree"> <h4 class="panel-title"> <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion1" href="#collapseThree" aria-expanded="false" aria-controls="collapseThree"> パネル3 </a> </h4> </div> <div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree"> <div class="panel-body"> Quod, inventore, similique... </div> </div> </div> </div>
ツールチップ
ツールチップはマウスオーバー時に説明文を表示する機能です。(Tooltips)
ツールチップを使用するには、要素に data-toggle="tooltip" 属性を指定し、title 属性にツールチップで表示する内容(説明文)を指定します。
また、data-placement 属性でツールチップを表示する方向を指定することができます。data-placement 属性を省略した場合は、デフォルトの値 top が適用され、ツールチップが上側に表示されます。指定できる値は、"top"(上)、 "bottom"(下)、 "left"(左)、 "right"(右)です。
この機能はデフォルトでは有効になっていないので、以下の JavaScript (jQuery) を記述しておく必要があります。この記述は、jquery.mins.js と bootstrap.min.js を読み込んだ後に記述する必要があります。
以下の JavaScript (jQuery) は、data-toggle 属性の値が "tooltip" の要素で tooltip() を実行するというような意味になります。
$(function () { $('[data-toggle="tooltip"]').tooltip(); })
以下は、a 要素を使った例です。
<p>これは<a href="#" data-toggle="tooltip" title="デフォルト表示(Top)">ツールチップ</a>のサンプルです。</p>
これはツールチップのサンプルです。
以下は、button 要素を使ったサンプルです。
<button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="right" title="Tooltip on right">Tooltip on right</button> <button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="top" title="Tooltip on top">Tooltip on top</button> <button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</button> <button type="button" class="btn btn-default" data-toggle="tooltip" data-placement="left" title="Tooltip on left">Tooltip on left</button>
クリックで表示
マウスオーバー時ではなく、クリックした際にツールチップを表示するようにするには、data-trigger="click" という属性を指定します。デフォルトは data-trigger="hover focus" です。
<p>クリックした際に<a href="#" data-toggle="tooltip" data-trigger="click" title="クリックで表示・非表示">ツールチップ</a>を表示</p>
クリックした際にツールチップを表示
a 要素の href 属性に # を指定した場合、トップへスクロールをしないようにするには、以下のような jQuery を記述して、デフォルトの動作を止めることができます。
$('[data-toggle="tooltip"]').click(function() { if($(this).attr('href') == '#') { return false; } });
任意のクラスで初期化
任意のクラスを指定した要素でツールチップを表示させることもできます。その場合、そのクラスを使ってツールチップの機能を有効にします。
例えば、ttps というクラスを指定した要素でツールチップを表示させるには以下のようにします。以下の JavaScript (jQuery) は、クラス属性の値が "ttps" の要素で tooltip() を実行するというような意味になります。
但し、クラス名に「tooltip」を使うと競合してうまく行かないので、それ以外のクラス名を指定する必要があります。
$(function () { $('.ttps').tooltip(); })
マークアップは、前述のマークアップと同じですが、指定したクラス属性を追加します。
<p>これは<a class="ttps" href="#" data-toggle="tooltip" title="任意のクラスで初期化">ツールチップ</a>のサンプルです。</p>
これはツールチップのサンプルです。
ポップオーバー
ツールチップと似たような機能としてポップオーバーという機能も用意されています。ポップオーバーは、説明文が見出しと本文からなる形式になっています。(Popovers)
ポップオーバーを使用するには、要素に data-toggle="popover" 属性を指定し、title 属性にポップオーバーで表示するタイトルを指定し、data-content 属性にポップオーバーの本文(内容)を指定ます。
また、data-placement 属性でポップオーバーを表示する方向を指定することができます。data-placement 属性を省略した場合は、デフォルトの値 right が適用され、ポップオーバーが右側に表示されます。指定できる値は、"top"(上)、 "bottom"(下)、 "left"(左)、 "right"(右)です。
この機能はデフォルトでは有効になっていないので、以下の JavaScript (jQuery) を記述しておく必要があります。この記述は、jquery.mins.js と bootstrap.min.js を読み込んだ後に記述する必要があります。
$(function () { $('[data-toggle="popover"]').popover(); })
任意のクラスを指定した要素でポップオーバーを表示させることもできます。その場合、そのクラスを使ってポップオーバーの機能を有効にします。
例えば、popovr というクラスを指定した要素でポップオーバーを表示させるには以下のようにします。以下の JavaScript (jQuery) は、クラス属性の値が "popovr" の要素で popover() を実行するというような意味になります。
$(function () { $('.popovr').popover(); })
以下は、button 要素を使用した場合の例です。
<button type="button" class="btn btn-info" data-toggle="popover" title="タイトル" data-content="ポップオーバー本文">クリック</button>
以下は a 要素を使ってポップオーバーを表示する例です。
<a href="#" data-content="コンテンツ(内容)" title="タイトル" data-toggle="popover">ポップオーバーを表示</a>
a 要素の href 属性に # を指定した場合、トップへスクロールをしないようにするには、以下のような jQuery を記述して、デフォルトの動作を止めることができます。
$('[data-toggle="popover"]').click(function() { if($(this).attr('href') == '#') { return false; } });
マウスオーバーで表示
クリックした時ではなく、マウスオーバーした際にポップオーバーを表示するようにするには、data-trigger="hover" という属性を指定します。デフォルトは data-trigger="click" です。
<a href="#" data-content="コンテンツ(内容)" title="タイトル" data-toggle="popover" data-trigger="hover">ポップオーバー</a>
モーダル
モーダル(Modals)は、ボタンやリンク等をクリックした時に、モーダルダイアログを表示する機能です。
モーダルダイアログを開く要素(button 要素や a 要素など)に data-toggle="modal" を指定し、data-target 属性にモーダルダイアログ用の div 要素の id 属性(または特定できる class 属性)の値を指定します。
続いてモーダルダイアログ用の div 要素に、modal と fade クラスを指定し、前述の data-target 属性に指定した値を id 属性に指定します。
モーダルダイアログ用の div 要素の中に modal-dialog クラスを指定した div 要素を作成し、更にその中に modal-content クラスを指定した div 要素を作成します。
modal-content クラスを指定した div 要素の中に必要に応じて、ヘッダ(modal-header クラスを指定した div 要素)、本文(modal-body クラスを指定した div 要素)、フッタ(modal-footer クラスを指定した di v要素)を配置します。ヘッダ内に表示する文字に modal-title クラスを指定しておくと、余白や行間などが適切なスタイルに設定されます。
また、モーダルダイアログを閉じるボタンを作成する必要があり、この要素には data-dismiss="modal" という属性を指定します。以下の例では、ヘッダとフッタにダイアログを閉じるためのボタンを配置しています。ヘッダのボタンには close クラスを指定しています。
<!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal"> モーダル・サンプル </button> <!-- Modal --> <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">モーダル・タイトル</h4> </div> <div class="modal-body"> <p class="text-center"><img src="images/sample.jpg" alt=""></p> <p class="text-center">Sample Photo</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </div> </div> </div>
モーダルダイアログのサイズ
通常(デフォルト)のモーダルダイアログは、幅 600px で表示されますが、モーダルダイアログのサイズを変更する以下のクラスが用意されています。(ウィンドウ幅が 767px 以下の場合は、ウィンドウ幅に合わせて表示されます)
- modal-lg (大きなサイズ)
- モーダルダイアログが幅 900px で表示されます。但し、この指定が有効になるのはウィンドウ幅が 992px 以上の場合です。991px 以下の場合は、600px で表示されます。
- modal-sm (小さなサイズ)
- モーダルダイアログが幅 300px で表示されます。但し、この指定が有効になるのはウィンドウ幅が 768px 以上の場合です。
これらのクラスは、modal-dialog クラスを指定した div 要素に追加します。また、以下の例では、data-target の値にモーダルダイアログ用の div 要素のクラス属性の値を指定しています。
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-lg">Large modal</button> <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title noindex" id="myLargeModalLabel">モーダル・タイトル</h4> </div> <div class="modal-body"> <p class="center-block"><img src="images/sample.jpg" alt=""></p> <p class="center-block">Sample Photo</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </div> </div> </div> <!-- Small modal --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-sm">Small modal</button> <div class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel"> <div class="modal-dialog modal-sm" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title noindex" id="mySmallModalLabel">モーダル・タイトル</h4> </div> <div class="modal-body"> <p class="text-center"><img src="images/sample.jpg" alt=""></p> <p class="text-center">Sample Photo</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </div> </div> </div>
写真をライトボックスのように表示
モーダルを利用して、写真をライトボックスのように表示することもできます。
以下の例では、モーダルダイアログを開く要素に a 要素を使用しています。この場合、data-target 属性ではなく、href 属性でモーダルダイアログの id を指定できます。
<p><a href="#modal-lbox" data-toggle="modal"><img src="images/sample.jpg" alt="" style="width:180px"></a></p> <div class="modal fade" id="modal-lbox" tabindex="-1" role="dialog"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <p class="text-center"><img src="../images/Plugins/Bootstrap/sample_img_responsive.jpg" class="img-responsive" alt=""></p> </div> <div class="modal-footer"> <p class="text-center">Sample Photo</p> </div> </div> </div> </div>
カルーセル
カルーセルはスライドショーのように画像などのコンテンツを順番に繰り返し表示する機能です。
カルーセルを作成するには、その範囲を carousel と slide クラスを指定した div 要素で囲み、data-ride="carousel" 属性を指定し、カルーセルの id を指定(この例では carousel1)します。
上記で作成した div 要素の中に、各画像に対応するアイコン(○や●)を表示するために carousel-indicators クラスを指定した ol 要素を配置し、画像の数だけ li 要素を記述します。この li 要素には、data-target 属性(値には data-ride="carousel" 属性を指定した div 要素の id を指定)と data-slide-to 属性(値は数値を0から順に指定)を指定します。また、初期表示される画像に対応する li 要素には active クラスを指定します。(●のアイコン)
続いて carousel-inner クラスを指定した div 要素を作成し、この中にそれぞれの画像を記述する item クラスを指定した div 要素を配置し、初期表示される画像の要素には active クラスを指定します。item クラスを指定した div 要素内に画像の img 要素とキャプション用の carousel-caption クラスを指定した div 要素を配置します。
最後に「前へ」や「次へ」を示すコントロールのための carousel-control クラスを指定した a 要素を記述します。
- 「前へ」のコントロール用 a 要素:left クラスを追加。href 属性にカルーセルの id を指定。 data-slide="prev" 属性を指定。icon-prev クラスを指定した span 要素を配置(矢印のアイコン)。
- 「次へ」のコントロール用 a 要素:right クラスを追加。href 属性にカルーセルの id を指定。 data-slide="next" 属性を指定。icon-next クラスを指定した span 要素を配置(矢印のアイコン)。
<div id="carousel1" class="carousel slide" data-ride="carousel"> <!-- Indicators --> <ol class="carousel-indicators"> <li data-target="#carousel1" data-slide-to="0" class="active"></li> <li data-target="#carousel1" data-slide-to="1"></li> <li data-target="#carousel1" data-slide-to="2"></li> <li data-target="#carousel1" data-slide-to="3"></li> </ol> <!-- Wrapper for slides --> <div class="carousel-inner" role="listbox"> <div class="item active"> <img src="images/carousel_1.jpg" alt="..."> <div class="carousel-caption">キャプション1</div> </div> <div class="item"> <img src="images//carousel_2.jpg" alt="..."> <div class="carousel-caption">キャプション2</div> </div> ・・・中略・・・ <!-- Controls --> <a class="left carousel-control" href="#carousel1" role="button" data-slide="prev"> <span class="icon-prev" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="right carousel-control" href="#carousel1" role="button" data-slide="next"> <span class="icon-next" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> </div>
コントロールの矢印は、以下のように Glyphicon のアイコンを指定することもできます。
<!-- Controls --> <a class="left carousel-control" href="#carousel1" role="button" data-slide="prev"> <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="right carousel-control" href="#carousel1" role="button" data-slide="next"> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> <span class="sr-only">Next</span> </a>
画像へのリンク
画像にリンクを設定する場合は、item クラスを指定した div 要素の内部を a 要素で囲みます。
<div class="item"> <a href="http://example.com"> <img src="images/carousel_2.jpg" alt="..."> <div class="carousel-caption"> キャプション2 </div> </a> </div>
オプション
カルーセルにオプションを設定するには、data-ride="carousel" 属性を指定した div 要素に data-xxxx 属性を指定します。以下のようなものがあります。
- data-interval
- スライドするまでの時間を指定できます。デフォルトは "5000" ミリ秒(5秒)です。"0" または "false" を指定すると自動的に開始されません。
- data-pause
- デフォルトは "hover" で、画像上にマウスオーバーすると自動的にスライドが停止し、マウスが離れるとスライドが開始します。"null"を指定するとマウスオーバーしても停止しません。
- data-wrap
- デフォルトは "true" で、スライドが繰り返されます。"false" を指定すると、最後の画像まで到達すると停止します(循環しなくなります)。
<div id="carousel1" class="carousel slide" data-ride="carousel" data-interval="0">