Bootstrapでタブ(Tabs)を作る方法
Contents
Bootstrapでタブ(Tabs)を作る方法
デモページ
まず、「デモページ」をクリックし、デモページを開いてから、記事を確認してみてください。
HTMLコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Bootstrap Tabs demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<!-- JSファイル読み込み -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<div class="row">
<div style="margin-bottom:30px">
<h2>.nav-tabs</h2>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation" >
<a class="nav-link active" aria-current="page" href="#home1"
id="home1-tab"
data-bs-toggle="tab"
role="tab"
>ホーム</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" href="#profile1"
id="profile1-tab"
data-bs-toggle="tab"
role="tab"
aria-controls="profile1"
aria-selected="false"
>プロフィール</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#contact1"
id="contact1-tab"
data-bs-toggle="tab"
role="tab"
>お問い合わせ</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効(Disabled)</a>
</li>
</ul>
<div class="tab-content" id="myTabContent1">
<div
class="tab-pane fade show active"
id="home1"
role="tabpanel"
aria-labelledby="home1-tab"
>
ホーム
</div>
<div
class="tab-pane fade"
id="profile1"
role="tabpanel"
aria-labelledby="profile1-tab"
>
プロフィール
</div>
<div
class="tab-pane fade"
id="contact1"
role="tabpanel"
aria-labelledby="contact1-tab"
>
お問い合わせ
</div>
</div>
</div>
</div><!-- row -->
<div class="row" >
<div style="margin-bottom:30px">
<h2>.nav-pills</h2>
<ul class="nav nav-pills" id="myTab2" role="tablist">
<li class="nav-item" role="presentation" >
<a class="nav-link active" aria-current="page" href="#home2"
id="home2-tab"
data-bs-toggle="tab"
role="tab"
>ホーム</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link" href="#profile2"
id="profile2-tab"
data-bs-toggle="tab"
role="tab"
aria-controls="profile2"
aria-selected="false"
>プロフィール</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#contact2"
id="contact2-tab"
data-bs-toggle="tab"
role="tab"
>お問い合わせ</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効(Disabled)</a>
</li>
</ul>
<div class="tab-content" id="myTabContent2">
<div
class="tab-pane fade show active"
id="home2"
role="tabpanel"
aria-labelledby="home2-tab"
>
ホーム
</div>
<div
class="tab-pane fade"
id="profile2"
role="tabpanel"
aria-labelledby="profile2-tab"
>
プロフィール
</div>
<div
class="tab-pane fade"
id="contact2"
role="tabpanel"
aria-labelledby="contact2-tab"
>
お問い合わせ
</div>
</div>
</div>
</div><!-- row -->
<div class="row">
<div style="margin-bottom:30px">
<h2>.nav-justified (hrefなし)</h2>
<ul class="nav nav-pills nav-justified" id="myTab3" role="tablist">
<li class="nav-item" role="presentation" >
<a class="nav-link active" aria-current="page"
id="home3-tab"
data-bs-toggle="tab"
data-bs-target="#home3"
role="tab"
>ホーム</a>
</li>
<li class="nav-item" role="presentation">
<a class="nav-link"
id="profile3-tab"
data-bs-toggle="tab"
data-bs-target="#profile3"
role="tab"
aria-controls="profile3"
aria-selected="false"
>プロフィール</a>
</li>
<li class="nav-item">
<a class="nav-link"
id="contact3-tab"
data-bs-toggle="tab"
data-bs-target="#contact3"
role="tab"
>お問い合わせ</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効(Disabled)</a>
</li>
</ul>
<div class="tab-content" id="myTabContent3">
<div
class="tab-pane fade show active" id="home3">
ホーム
</div>
<div
class="tab-pane fade" id="profile3" >
プロフィール
</div>
<div class="tab-pane fade" id="contact3" >
お問い合わせ
</div>
</div>
</div>
</div><!-- row -->
<div class="row">
<div style="margin-bottom:30px">
<h2><nav> ベースのナビゲーション .nav-fill</h2>
<nav class="nav nav-pills nav-fill ">
<a class="nav-link active" aria-current="page" data-bs-toggle="tab" href="#home4">ホーム</a>
<a class="nav-link" data-bs-toggle="tab" href="#profile4">プロフィール</a>
<a class="nav-link" data-bs-toggle="tab" href="#contact4">お問い合わせ</a>
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効(Disabled)</a>
</nav>
<div class="tab-content" id="myTabContent4">
<div class="tab-pane fade show active" id="home4">
ホーム
</div>
<div class="tab-pane fade" id="profile4">
プロフィール
</div>
<div class="tab-pane fade" id="contact4">
お問い合わせ
</div>
</div>
</div>
</div><!-- row -->
<div class="row">
<div style="margin-bottom:30px">
<h2>ドロップダウン .nav-tabs</h2>
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#home5">ホーム</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">ドロップダウン</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" data-bs-toggle="tab" href="#profile5">プロフィール</a></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#portfolio5">ポートフォリオ</a></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#access5">アクセス</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#contact5">お問い合わせ</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#link5">リンク</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効(Disabled)</a>
</li>
</ul>
<div class="tab-content" id="myTabContent5">
<div class="tab-pane fade show active" id="home5">
ホーム
</div>
<div class="tab-pane fade" id="profile5">
プロフィール
</div>
<div class="tab-pane fade" id="portfolio5">
ポートフォリオ
</div>
<div class="tab-pane fade" id="access5">
アクセス
</div>
<div class="tab-pane fade" id="contact5">
お問い合わせ
</div>
<div class="tab-pane fade" id="link5">
リンク
</div>
</div>
</div>
</div><!-- row -->
<div class="row">
<div style="margin-bottom:30px">
<h2>ドロップダウン .nav-pills</h2>
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#home6">ホーム</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">ドロップダウン</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" data-bs-toggle="tab" href="#profile6">プロフィール</a></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#portfolio6">ポートフォリオ</a></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#access6">アクセス</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#contact6">お問い合わせ</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#link6">リンク</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効(Disabled)</a>
</li>
</ul>
<div class="tab-content" id="myTabContent5">
<div class="tab-pane fade show active" id="home6">
ホーム
</div>
<div class="tab-pane fade" id="profile6">
プロフィール
</div>
<div class="tab-pane fade" id="portfolio6">
ポートフォリオ
</div>
<div class="tab-pane fade" id="access6">
アクセス
</div>
<div class="tab-pane fade" id="contact6">
お問い合わせ
</div>
<div class="tab-pane fade" id="link6">
リンク
</div>
</div>
</div>
</div><!-- row -->
<div class="row">
<div style="margin-bottom:30px">
<h2>縦のタブ</h2>
<div class="d-flex align-items-start">
<div
class="nav flex-column nav-pills me-3"
id="v-pills-tab"
role="tablist"
aria-orientation="vertical"
>
<button
class="nav-link active"
id="v-pills-home-tab"
data-bs-toggle="pill"
data-bs-target="#v-pills-home"
type="button"
role="tab"
aria-controls="v-pills-home"
aria-selected="true"
>
ホーム
</button>
<button
class="nav-link"
id="v-pills-profile-tab"
data-bs-toggle="pill"
data-bs-target="#v-pills-profile"
type="button"
role="tab"
aria-controls="v-pills-profile"
aria-selected="false"
>
プロフィール
</button>
<button
class="nav-link"
id="v-pills-messages-tab"
data-bs-toggle="pill"
data-bs-target="#v-pills-messages"
type="button"
role="tab"
aria-controls="v-pills-messages"
aria-selected="false"
>
メッセージ
</button>
<button
class="nav-link"
id="v-pills-settings-tab"
data-bs-toggle="pill"
data-bs-target="#v-pills-settings"
type="button"
role="tab"
aria-controls="v-pills-settings"
aria-selected="false"
>
設定
</button>
</div>
<div class="tab-content" id="v-pills-tabContent">
<div
class="tab-pane fade show active"
id="v-pills-home"
role="tabpanel"
aria-labelledby="v-pills-home-tab"
>
ホーム
</div>
<div
class="tab-pane fade"
id="v-pills-profile"
role="tabpanel"
aria-labelledby="v-pills-profile-tab"
>
プロフィール
</div>
<div
class="tab-pane fade"
id="v-pills-messages"
role="tabpanel"
aria-labelledby="v-pills-messages-tab"
>
メッセージ
</div>
<div
class="tab-pane fade"
id="v-pills-settings"
role="tabpanel"
aria-labelledby="v-pills-settings-tab"
>
設定
</div>
</div>
</div>
</div>
</div><!-- row -->
<div class="row">
<div style="margin-bottom:30px">
<h2>Javascriptサンプル</h2>
<nav class="nav nav-pills" id="myTab8">
<a class="nav-link"> ホーム</a>
<a class="nav-link active" >プロフィール</a>
<a class="nav-link" id="contactTab8" data-bs-target="#contact8">お問い合わせ</a>
<button class="btn btn-info" onclick="showContactTab();">お問い合わせ表示</button>
</nav>
<div class="tab-content" id="myTabContent8">
<div class="tab-pane fade" id="home8">
ホーム
</div>
<div class="tab-pane fade show active" id="profile8">
プロフィール
</div>
<div class="tab-pane fade" id="contact8">
お問い合わせ
</div>
</div>
<script>
var lastTabEl = document.getElementById('contactTab8');
var lastTab = new bootstrap.Tab(lastTabEl);
function showContactTab() {
lastTab.show();
}
</script>
</div>
</div><!-- row -->
</div><!-- container -->
</body>
</html>
実装方法
Bootstrap導入
まず、BootstrapのCSSファイルとJSファイルを読み込みます。
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
導入方法の詳細は、以下のページをご覧ください。
タブ実装
まず、タグ領域を生成します。
<ul class="nav nav-tabs" id="myTab" role="tablist">
..
</ul>
ulタグや、navタグで領域を作り、classに「nav-tabs」をします。
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" aria-current="page" href="#home1"
id="home1-tab"
data-bs-toggle="tab"
role="tab"
>ホーム</a>
</li>
..
</ul>
ulは以下の場合には、liタグを設定し、その中にaタグでリンクを設定してください。
aタグを設定する際、href属性を設定し、アドレスに、この後生成するタブのidを先頭にシャープ(#)をつけて指定してください。
また、「data-bs-toggle」属性を設定し、値に『tab』を設定してください。
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation" >
<a class="nav-link active" aria-current="page" href="#home1"
id="home1-tab"
data-bs-toggle="tab"
role="tab"
>ホーム</a>
</li>
...
</ul>
<div class="tab-content" id="myTabContent1">
<div
class="tab-pane fade show active"
id="home1"
role="tabpanel"
aria-labelledby="home1-tab"
>
ホーム
</div>
...
</div>
次に、各タブの内容領域を定義します。
まず、divで領域を生成し、classに『tab-content』を設定してください。
その配下に各タブ領域を設定してください。classには『tab-pane』を設定し、idも設定し、タブ領域のaタグのhrefで設定した文字列と一致させてください。
タブを初期選択させる
タブの初期選択させるには、まず、タブ領域にはclass『active』。
タブ内容領域のclassには『show』『active』を設定してください。
フェード効果
タブ内容領域のclassに『fade』を設定すると、タブ切り替え時、フェード効果を与えることができ、ジンワリタブが切り替わります。
Pills
classに「nav-tabs」の代わりに「nav-pills」指定することもできます。
<ul class="nav nav-pills" id="myTab2" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" aria-current="page" href="#home2"
id="home2-tab"
data-bs-toggle="tab"
role="tab"
>ホーム</a>
</li>
...
</ul>
利用可能な幅いっぱいのタブ
<ul class="nav nav-pills nav-justified" id="myTab3" role="tablist">
<li class="nav-item" role="presentation">
<a class="nav-link active" aria-current="page"
id="home3-tab"
data-bs-toggle="tab"
data-bs-target="#home3"
role="tab"
>ホーム</a>
</li>
...
</ul>
classに「nav-justified」を設定することで、利用可能な幅いっぱいのタブを設定できます。
なお、aタグに「href」属性がなくても、「data-bs-target」属性を設定すれば、タブを実装できます。
<nav>タグだけでもタブ領域を実装できます。
<nav class="nav nav-pills nav-fill ">
<a class="nav-link active" aria-current="page" data-bs-toggle="tab" href="#home4">ホーム</a>
<a class="nav-link" data-bs-toggle="tab" href="#profile4">プロフィール</a>
<a class="nav-link" data-bs-toggle="tab" href="#contact4">お問い合わせ</a>
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">無効(Disabled)</a>
</nav>
<div class="tab-content" id="myTabContent4">
<div class="tab-pane fade show active" id="home4">
ホーム
</div>
<div class="tab-pane fade" id="profile4">
プロフィール
</div>
<div class="tab-pane fade" id="contact4">
お問い合わせ
</div>
</div>
ドロップダウンでのタブ選択
<ul class="nav nav-tabs">
...
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">ドロップダウン</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" data-bs-toggle="tab" href="#profile5">プロフィール</a></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#portfolio5">ポートフォリオ</a></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#access5">アクセス</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" data-bs-toggle="tab" href="#contact5">お問い合わせ</a></li>
</ul>
</li>
</ul>
ドロップダウンのタブについても、基本的な構造は変わりません。
まず、ulタグでclass『nav nav-tabs』を設定。
ドロップダウンリストの各項目に属性「data-bs-toggole」に『tab』を設定し、かつ、href属性にタブ内容領域のidをシャープ(#)で設定してください。
縦のタブ
<div class="d-flex align-items-start">
<div
class="nav flex-column nav-pills me-3"
id="v-pills-tab"
role="tablist"
aria-orientation="vertical"
>
<button
class="nav-link active"
id="v-pills-home-tab"
data-bs-toggle="pill"
data-bs-target="#v-pills-home"
type="button"
role="tab"
aria-controls="v-pills-home"
aria-selected="true"
>
ホーム
</button>
...
</div>
Bootstrapのクラス『d-flex』と『flex-column』を利用すれば、縦並びのタブ領域を生成できます。
Javascriptでタブ切り替え
Javascriptを使って「show()」メソッドを呼び出せば、タブクリック以外でもタブの切り替えが可能になります。
<nav class="nav nav-pills" id="myTab8">
<a class="nav-link"> ホーム</a>
<a class="nav-link active" >プロフィール</a>
<a class="nav-link" id="contactTab8" data-bs-target="#contact8">お問い合わせ</a>
<button class="btn btn-info" onclick="showContactTab();">お問い合わせ表示</button>
</nav>
<div class="tab-content" id="myTabContent8">
<div class="tab-pane fade" id="home8">
ホーム
</div>
<div class="tab-pane fade show active" id="profile8">
プロフィール
</div>
<div class="tab-pane fade" id="contact8">
お問い合わせ
</div>
</div>
<script>
var lastTabEl = document.getElementById('contactTab8');
var lastTab = new bootstrap.Tab(lastTabEl);
function showContactTab() {
lastTab.show();
}
</script>
ご参考
関連ページ
- フレームワークBootstrap5の導入方法
- jQuery UIでTabs(タブ)を実装する方法
- jQuery UIで縦のTabs(タブ)を実装する方法
- 「Shoelace」でタブ(Tab)を作成する方法
- タブ(Tab)を自作する方法