jQueryでタブ切り替えの中にさらにタブ切り替えを作る方法【コピペOKサンプル付き】
タブ切り替えを使ったUIは、限られたスペースで多くの情報を整理するのに非常に便利です。
今回はその応用として、「タブの中にさらに別のタブ(子タブ)を設置する」
入れ子構造のタブ切り替えをjQueryで実装する方法をご紹介します。
完成イメージ
- 上部に「親タブ」があり、切り替えるとその中に「子タブ」が表示される
- 親タブと子タブはそれぞれ独立して切り替えが可能
- HTML・CSS・jQueryの基本知識でカスタマイズも簡単
HTMLの書き方
まずはHTML構造です。親タブと、その中に子タブを配置します。
<div class="tab-parent">
<!-- 親タブメニュー -->
<ul class="tab-menu">
<li class="active"><a href="#parent1">親タブ1</a></li>
<li><a href="#parent2">親タブ2</a></li>
</ul>
<!-- 親タブ1の内容(子タブ含む) -->
<div id="parent1" class="tab-content active">
<p>親タブ1の内容</p>
<!-- 子タブメニュー -->
<ul class="child-tab-menu">
<li class="active"><a href="#child1-1">子タブ1-1</a></li>
<li><a href="#child1-2">子タブ1-2</a></li>
</ul>
<!-- 子タブのコンテンツ -->
<div id="child1-1" class="child-tab-content active">子タブ1-1の内容です。</div>
<div id="child1-2" class="child-tab-content">子タブ1-2の内容です。</div>
</div>
<!-- 親タブ2の内容(子タブなし) -->
<div id="parent2" class="tab-content">
<p>親タブ2の内容です。</p>
</div>
</div>
CSSスタイル
以下のCSSで親子タブの見た目を整えましょう。
/* 親・子タブ共通 */
.tab-menu,
.child-tab-menu {
display: flex;
list-style: none;
padding: 0;
margin-bottom: 10px;
border-bottom: 2px solid #ccc;
}
.tab-menu li,
.child-tab-menu li {
margin-right: 10px;
}
.tab-menu li a,
.child-tab-menu li a {
display: inline-block;
padding: 10px 15px;
text-decoration: none;
color: #333;
border: 1px solid #ccc;
border-bottom: none;
background: #f9f9f9;
border-radius: 5px 5px 0 0;
}
.tab-menu li.active a,
.child-tab-menu li.active a {
background: #fff;
color: #000;
font-weight: bold;
border-bottom: 2px solid #fff;
}
/* コンテンツ非表示 */
.tab-content,
.child-tab-content {
display: none;
padding: 15px;
border: 1px solid #ccc;
background: #fff;
}
/* アクティブ表示 */
.tab-content.active,
.child-tab-content.active {
display: block;
}
jQueryのスクリプト
以下を<script>
タグ内または別ファイルに記述して読み込んでください。
$(function () {
// 親タブ切り替え
$('.tab-menu li a').on('click', function (e) {
e.preventDefault();
const target = $(this).attr('href');
$('.tab-menu li').removeClass('active');
$(this).parent().addClass('active');
$('.tab-content').removeClass('active');
$(target).addClass('active');
});
// 子タブ切り替え(現在表示中の親タブ内のみ対象)
$('.child-tab-menu li a').on('click', function (e) {
e.preventDefault();
const target = $(this).attr('href');
const $parent = $(this).closest('.tab-content');
$parent.find('.child-tab-menu li').removeClass('active');
$(this).parent().addClass('active');
$parent.find('.child-tab-content').removeClass('active');
$parent.find(target).addClass('active');
});
});
実装のポイント
.closest('.tab-content')
を使うことで、現在表示中の親タブ内だけで子タブの切り替えを完結できます。- HTMLのIDは重複させないように気をつけましょう。
- スタイルはテーマに合わせて自由にカスタマイズできます。
応用アイデア
- タブの中にフォームや画像ギャラリーを配置
- WordPressのカスタムフィールドやACFと連携
- スマホ用にアコーディオン化
✅ まとめ
「タブの中にさらにタブ」を実装することで、情報量の多いページでもユーザーが迷わず操作できます。
今回のコードはそのまま使えるサンプルですので、コピペしてぜひプロジェクトに活用してください!
jQueryで実装するタブ切り替え機能
2月 18, 2025jQueryページ移管時のアニメーションの最適化
12月 19, 2024jQueryプラグインAOS(Animate On Scroll)についての解説
8月 20, 2024