JavaScript スニペット

モダンなWebデザインのためのHTMLタブ切り替えテクニック【jQueryなし】

htmlタブ切り替え実装

ウェブサイトやアプリケーションにおいて、コンテンツを整理し、ユーザーにフレンドリーなナビゲーションを提供するための一般的な方法として、タブ切り替え機能がよく利用されます。
この記事では、JavaScriptを用いてモダンなタブ切り替え機能を実装する方法を紹介します。HTMLとCSSを使った基本的なセットアップから始め、JavaScriptでの動的な挙動の追加までをカバーします。

タブ切り替えサンプル

こちらがタブ切り替えのサンプルです。
タブを押すとフェードして、コンテンツが切り替わります。
タブを増やしても、正常に動作する作りになっています。

See the Pen Untitled by kokusyo (@kokusyo) on CodePen.

ソース解説

HTMLの構造

クラス「.tabs」はタブを切り替えるボタン、「.tab-content」クラスは、表示されるコンテンツです。
.active」クラスが付与されているタブが表示されます。

<!-- タブ切り替えのボタン -->
<div class="tabs">
	<button class="tab-button active">タブ1</button>
	<button class="tab-button">タブ2</button>
	<button class="tab-button">タブ3</button>
</div>

<!-- 切り替え対象のタブ -->
<div class="tab-content">
	<div class="content active">タブ1の内容です。</div>
	<div class="content">タブ2の内容です。</div>
	<div class="content">タブ3の内容です。</div>
</div>

CSSによるスタイリング

タブ切り替え時のフェード処理は、「transition」プロパティを使用して実装しています。
.active」クラスが付与されると、visibility: visible; opacity: 1;となり、コンテンツが表示されます。

.tabs {
	display: flex;
	justify-content: space-between;
	margin-bottom: 10px;
}

/* 各タブボタンのスタイリング */
.tab-button {
	flex-grow: 1;
	padding: 10px 20px;
	cursor: pointer;
	border: none;
	background-color: #f0f0f0;
	outline: none;
	transition: background-color 0.3s;
	border-bottom: 3px solid transparent;
}

.tab-button.active {
	background-color: #fff;
	border-bottom: 3px solid #007BFF;
}

.tab-content .content {
	visibility: hidden;
	opacity: 0;
	transition: opacity 0.5s, visibility 0s linear 0.5s;
	position: absolute;
	/* コンテンツが重なるように配置 */
	width: 100%;
	border: 1px solid #ddd;
	padding: 20px;
	background-color: #fff;
}

.tab-content .content.active {
	visibility: visible;
	opacity: 1;
	transition: opacity 0.5s;
}

JavaScriptによるインタラクティブな動作

各タブボタンにクリックイベントリスナーを設定し、そのタブがクリックされたときに switchTab 関数を呼び出して、アクティブなタブとコンテンツを切り替えます。

const tabs = document.querySelectorAll('.tab-button');
const contents = document.querySelectorAll('.content');

for (const [index, tab] of tabs.entries()) {
	tab.addEventListener('click', () => switchTab(index));
}

function switchTab(index) {
	// タブのアクティブ状態を更新
	for (const tab of tabs) {
		tab.classList.remove('active');
	}
	tabs[index].classList.add('active');

	// 一度全てのタブを非表示にする
	for (const content of contents) {
		content.classList.remove('active');
	}

	// 選択したタブのコンテンツを表示する
	contents[index].classList.add('active');
}

【完全無料】独学で挫折しかけたら、0円で“質問できる環境”を試そう。

独学だと、調べても解決できず手が止まる瞬間があります。
私も実際に登録して、カリキュラム内容と質問導線を一通り試しました。
0円で試せる学習環境を、メリット・注意点込みでレビューにまとめています。

✅ 調べても解決せず、学習が止まりがち
✅ 質問できる相手がいなくて不安
✅ 何から手を付けるべきか迷う
✅ 0円で質問できる環境を試してみたい

体験レビューを読む(無料の理由・注意点も)

まずは雰囲気を知りたい人向けに、体験レビューを用意しました。

-JavaScript, スニペット
-, , ,