ハイパーリンクをクリックして特定のタブを表示するBootstrapタブ
Twitter Bootstrap Tabs で特定のタブをページ読み込み時またはハイパーリンクで表示する方法
Twitter Bootstrap は、Web 開発を容易にする人気のある CSS フレームワークです。Bootstrap には、タブパネルと呼ばれるコンポーネントが含まれており、コンテンツを複数のタブに分割できます。デフォルトでは、最初のタブがアクティブな状態になります。しかし、JavaScript と HTML を使用して、ページ読み込み時またはハイパーリンクをクリックしたときに特定のタブをアクティブにすることができます。
方法
- HTML でタブを設定する
まず、HTML でタブ構造を定義する必要があります。これは、次のようになります。
<div class="tab-pane" id="tab1">
コンテンツ 1
</div>
<div class="tab-pane" id="tab2">
コンテンツ 2
</div>
<div class="tab-pane" id="tab3">
コンテンツ 3
</div>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation"><a href="#tab1" role="tab" data-toggle="tab">タブ 1</a></li>
<li role="presentation"><a href="#tab2" role="tab" data-toggle="tab">タブ 2</a></li>
<li role="presentation"><a href="#tab3" role="tab" data-toggle="tab">タブ 3</a></li>
</ul>
このコードは、3 つのタブと 3 つのタブパネルを定義します。各タブパネルには、id
属性と tab-pane
クラスが設定されています。各タブには、href
属性と data-toggle="tab"
属性が設定されたリンクが含まれています。
- JavaScript で特定のタブをアクティブにする
次に、JavaScript を使用して、ページ読み込み時またはハイパーリンクをクリックしたときに特定のタブをアクティブにする必要があります。これを行うには、次のコードを使用できます。
$(document).ready(function() {
// ページ読み込み時にタブ 2 をアクティブにする
$('#tab2').tab('show');
// ハイパーリンクがクリックされたときにタブをアクティブにする
$('a[data-toggle="tab"]').on('click', function(e) {
e.preventDefault();
$(this).tab('show');
});
});
このコードは、次のことを行います。
- ページ読み込み時に
tab('show')
メソッドを使用してタブ 2 をアクティブにします。 - ハイパーリンクがクリックされたときに、
preventDefault()
メソッドを使用してデフォルトの動作をキャンセルし、tab('show')
メソッドを使用してクリックされたタブをアクティブにします。
コードの説明
$(document).ready(function() {...});
:このコードは、DOM が完全にロードされた後に実行される関数を定義します。$('#tab2').tab('show');
:このコードは、id
がtab2
のタブパネルをアクティブにします。$('a[data-toggle="tab"]').on('click', function(e) {...});
:このコードは、data-toggle="tab"
属性を持つすべての要素にclick
イベントリスナーを追加します。e.preventDefault();
:このコードは、デフォルトのリンク動作 (ページの読み込み) をキャンセルします。
その他のヒント
- ページの URL にハッシュフラグメントを含めることで、特定のタブをアクティブにすることもできます。たとえば、
http://example.com/#tab2
にアクセスすると、タブ 2 がアクティブになります。 - JavaScript を使用して、タブパネルのコンテンツを動的にロードすることもできます。
以下のサンプルコードは、Twitter Bootstrap Tabs で特定のタブをページ読み込み時またはハイパーリンクで表示する方法を実装します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bootstrap Tabs サンプル</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<h1>Bootstrap Tabs サンプル</h1>
<ul class="nav nav-tabs" role="tablist">
<li role="presentation"><a href="#tab1" role="tab" data-toggle="tab">タブ 1</a></li>
<li role="presentation"><a href="#tab2" role="tab" data-toggle="tab">タブ 2</a></li>
<li role="presentation"><a href="#tab3" role="tab" data-toggle="tab">タブ 3</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane" id="tab1" role="tabpanel">
コンテンツ 1
</div>
<div class="tab-pane" id="tab2" role="tabpanel">
コンテンツ 2
</div>
<div class="tab-pane" id="tab3" role="tabpanel">
コンテンツ 3
</div>
</div>
</div>
<script>
$(document).ready(function() {
// ページ読み込み時にタブ 2 をアクティブにする
$('#tab2').tab('show');
// ハイパーリンクがクリックされたときにタブをアクティブにする
$('a[data-toggle="tab"]').on('click', function(e) {
e.preventDefault();
$(this).tab('show');
});
});
</script>
</body>
</html>
このコードを保存して index.html
という名前で保存し、Web ブラウザで開くと、以下のようになります。
- 初期状態でタブ 2 がアクティブになります。
- タブ 1、タブ 2、タブ 3 のリンクをクリックすると、それぞれ対応するタブがアクティブになります。
コードの説明
前述の説明で説明した各部分のコードを、より詳細に説明します。
HTML コード
<!DOCTYPE html>
:HTML5 ドキュメントであることを宣言します。<html lang="ja">
:HTML 文書の言語が日本語であることを指定します。<head>
:HTML 文書のヘッダー部分です。<meta charset="UTF-8">
:文字エンコーディングを UTF-8 に設定します。<meta name="viewport" content="width=device-width, initial-scale=1.0">
:画面幅に合わせて表示範囲を調整します。<title>Bootstrap Tabs サンプル</title>
:Web ページのタイトルを設定します。<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
:Bootstrap の CSS ファイルを読み込みます。<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
:jQuery ライブラリを読み込みます。
<body>
:HTML 文書のボディ部分です。- `<div class
JavaScript で location.hash を使用する
この方法は、ページの URL にハッシュフラグメント (#
) を含めることで、特定のタブをアクティブにするものです。例:
<a href="#tab2">タブ 2 へ移動</a>
上記のリンクをクリックすると、#tab2
というハッシュフラグメントが URL に追加されます。JavaScript で location.hash
プロパティを使用してこのハッシュフラグメントを取得し、それに対応するタブをアクティブにすることができます。
$(document).ready(function() {
// ページ読み込み時に URL のハッシュフラグメントに基づいてタブをアクティブにする
var hash = location.hash;
if (hash) {
$(hash).tab('show');
}
});
このコードは、ページ読み込み時に location.hash
プロパティをチェックし、ハッシュフラグメントがあればそれに対応するタブをアクティブにします。
データ属性を使用してデフォルトのタブを設定する
この方法は、data-default-tab
というデータ属性を使用して、デフォルトでアクティブにするタブを指定する方法です。例:
<ul class="nav nav-tabs" role="tablist" data-default-tab="tab2">
<li role="presentation"><a href="#tab1" role="tab" data-toggle="tab">タブ 1</a></li>
<li role="presentation"><a href="#tab2" role="tab" data-toggle="tab">タブ 2</a></li>
<li role="presentation"><a href="#tab3" role="tab" data-toggle="tab">タブ 3</a></li>
</ul>
上記のコードでは、data-default-tab="tab2"
というデータ属性を ul
要素に追加しています。これにより、ページ読み込み時にタブ 2 がデフォルトでアクティブになります。
この方法は、JavaScript で show()
メソッドを直接呼び出して特定のタブをアクティブにする方法です。例:
$(document).ready(function() {
// ページ読み込み時にタブ 2 をアクティブにする
$('#tab2').tab('show');
});
カスタムイベントを使用する
この方法は、カスタムイベントを使用してタブの切り替えを制御する方法です。例:
<script>
$(document).ready(function() {
// ページ読み込み時に "showTab2" イベントを発行する
$(document).trigger('showTab2');
// "showTab2" イベントを処理してタブ 2 をアクティブにする
$(document).on('showTab2', function() {
$('#tab2').tab('show');
});
});
</script>
上記のコードでは、ページ読み込み時に $(document).trigger('showTab2')
メソッドを呼び出して "showTab2" イベントを発行しています。次に、$(document).on('showTab2', function() {...});
メソッドを使用して、このイベントを処理し、タブ 2 をアクティブにします。
これらの方法はそれぞれ異なる利点と欠点があります。状況に応じて適切な方法を選択してください。
その他のヒント
- ページの URL にハッシュフラグメントを含めることで、ブックマークを作成することもできます。
Twitter Bootstrap Tabs で特定のタブをページ読み込み時またはハイパーリンクで表示するには、さまざまな方法があります。それぞれの方法の利点と欠点を理解し、状況に応じて適切な方法を選択してください。
javascript html tabs