JSFiddle - React, Tailwind, and code Playground
HTML
<div class="tabs-menu">
<div id="tab-menu-a">タブa</div>
<div id="tab-menu-b">タブb</div>
<div id="tab-menu-c">タブc</div>
</div>
<div class="tabs-content">
<div id="tabs-a">
<p>タブaの内容が入ります。</p>
</div>
<div id="tabs-b">
<p>タブbの内容が入ります。</p>
</div>
<div id="tabs-c">
<p>タブcの内容が入ります。</p>
</div>
</div>
CSS
/* ページ全体での文字色の設定 */
body {
color: #3f4548;
}
/* divのデフォルトスタイルを消去 */
.tabs-menu {
margin: 0;
padding: 0;
}
/* タブの基本スタイル */
.tabs-menu div {
display: block;
float: left;
padding: 10px 20px;
margin-right: 8px;
margin-bottom: -1px;
border-style: solid;
border-width: 1px;
border-color: transparent;
border-radius: 4px 4px 0 0;
color: #557f95;
text-decoration: none;
cursor: pointer;
/* 各プロパティをふわっと変える演出 */
transition: all 0.15s;
}
/* 非選択のタブにマウスカーソルを乗せたら色を変える(追記してください) */
.tabs-menu div:not(.active):hover {
border-color: #f0f0f0 #f0f0f0 #999;
background-color: #f0f0f0;
}
/* 選択中のタブ */
.tabs-menu .active {
color: #3f4548;
border-color: #999 #999 transparent #999;
background-color: #fff;
}
/* タブコンテンツ表示エリア */
.tabs-content {
clear: both;
border: 1px solid #999;
border-radius: 0 4px 4px 4px;
padding: 10px;
}
/* 各タブのコンテンツはデフォルトで非表示 */
.tabs-content > div {
display: none;
}
JavaScript
const showTab = (selector) => {
// 引数selectorの中身をコンソールで確認する
console.log(selector);
// TIPS: 同じ個所を操作する実装はなるべく固めよう
// tab-menuの操作をまとめる。分散させると全体に神経を使うので疲れる。
$(".tabs-menu > div").removeClass("active");
$('.tabs-menu div[id="' + selector + '"]').addClass('active');
// 同様にtabsの操作をまとめる
$(".tabs-content > div").hide();
$('.tabs-content div[id="tabs-' + selector.slice(-1) + '"]').show();
// なぜtabs-menuは動的にselector変数で処理しているのにtabsはifなのか?
// 同じように実装した方が統一感があってキレイだ
// if (selector === "tab-menu-a") {
// $("#tabs-a").show();
// }
// else if (selector === "tab-menu-b") {
// $("#tabs-b").show();
// }
// else if (selector === "tab-menu-c") {
// $("#tab-c").show();
// }
// TIPS: 無駄なコードは書かない
// これの有無で動作に違いはない。大体hide()している箇所ないし
// $("#" + selector).show();
};
// タブがクリックされたらコンテンツを表示
$(".tabs-menu div").on("click", (e) => {
const selector = $(e.target).attr('id');
showTab(selector);
});
// 初期状態として1番目のタブを表示
showTab('tab-menu-a');