ページを移動しても開閉状態を記憶するタブ切り替えの作り方
ページを移動しても選択中のタブを記憶するタブ切り替えの作り方を紹介します。このサンプルでは、HTML・CSS・JavaScriptの3つのタブから最後に選択したタブをブラウザのlocalStorageへ保存します。通常のタブ切り替えではページを再読み込みすると最初のタブへ戻りますが、localStorageを利用することで、ページを再読み込みした場合や別のページへ移動してから戻った場合でも、最後に選択していたタブを復元できます。
設定画面、管理画面、商品情報、マニュアル、会員サイトなど、利用者が一度選択した表示内容を次回も同じ状態で見せたい場面に利用できます。タブをクリックするたびに選択中のタブをlocalStorageへ保存し、ページ表示時には保存されている値を読み込んで対応するタブとコンテンツを表示します。そのため、利用者がどのタブを見ていたのかを維持したままページへ戻ることができます。
localStorageには保存期限が設定されていないため、一定時間が経過しただけで選択状態が自動的に削除されることはありません。基本的には、利用者がブラウザのサイトデータを削除するか、JavaScriptで保存データを削除するまで状態が残ります。ただし、ブラウザの設定や利用環境によって保存データが削除される場合があります。HTMLではタブ名や表示内容を変更でき、CSSでは横幅、余白、背景色、枠線、角丸などを調整できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
選択したタブをlocalStorageへ保存します。
タブを選択したあとにページを再読み込みしてください。最後に選択したタブがそのまま表示されます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>ページを移動しても開閉状態を記憶するタブ切り替え</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- タブ切り替え全体 -->
<div class="remember-tab-switch_wrap">
<!-- タイトル -->
<div class="remember-tab-switch_title">
開いているタブを記憶
</div>
<!-- 説明文 -->
<p class="remember-tab-switch_text">
タブを切り替えると、選択した状態がブラウザに保存されます。
</p>
<!-- タブボタン -->
<div class="remember-tab-switch_tabs" role="tablist" aria-label="使用技術">
<button
class="remember-tab-switch_tab is-active"
id="remember-tab-switch-html"
type="button"
role="tab"
aria-controls="remember-tab-switch-panel-html"
aria-selected="true"
data-tab="html">
HTML
</button>
<button
class="remember-tab-switch_tab"
id="remember-tab-switch-css"
type="button"
role="tab"
aria-controls="remember-tab-switch-panel-css"
aria-selected="false"
data-tab="css">
CSS
</button>
<button
class="remember-tab-switch_tab"
id="remember-tab-switch-js"
type="button"
role="tab"
aria-controls="remember-tab-switch-panel-js"
aria-selected="false"
data-tab="js">
JavaScript
</button>
</div>
<!-- HTMLの内容 -->
<div
class="remember-tab-switch_panel is-active"
id="remember-tab-switch-panel-html"
role="tabpanel"
aria-labelledby="remember-tab-switch-html"
data-panel="html">
HTMLはWebページの構造を作るためのマークアップ言語です。
</div>
<!-- CSSの内容 -->
<div
class="remember-tab-switch_panel"
id="remember-tab-switch-panel-css"
role="tabpanel"
aria-labelledby="remember-tab-switch-css"
data-panel="css">
CSSは文字色やレイアウトなど、見た目をデザインするために使います。
</div>
<!-- JavaScriptの内容 -->
<div
class="remember-tab-switch_panel"
id="remember-tab-switch-panel-js"
role="tabpanel"
aria-labelledby="remember-tab-switch-js"
data-panel="js">
JavaScriptはクリック時の切り替えなど、動きを付けるために使います。
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでタブボタンと各タブに対応する内容を作成し、CSSでタブのレイアウトや選択中の表示を整え、JavaScriptでタブの切り替えと選択状態の保存を行います。選択したタブはlocalStorageへ保存されるため、別のページへ移動したあとに戻った場合やページを再読み込みした場合でも、前回選択していたタブを再び表示できます。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはタブ切り替え全体を構成するファイルです。「HTML」「CSS」「JavaScript」の3つのタブボタンと、それぞれに対応する説明内容を記述しています。タブ名や各タブ内の文章を変更すると、画面に表示される内容を用途に合わせて変更できます。
style.cssはタブ切り替えのデザインを設定するファイルです。全体の横幅や余白、背景色、枠線、角丸、タブの高さ、選択中のタブの背景色や文字色などを変更できます。また、画面幅640px以下では余白や文字サイズを調整するレスポンシブ対応を行っています。
script.jsはタブの切り替えと選択状態の保存を行うファイルです。タブをクリックすると対応する内容へ切り替え、選択したタブの識別名をlocalStorageへ保存します。ページを開いたときは保存されている値を取得し、前回選択していたタブが存在する場合はそのタブを表示します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。3つのファイルを保存したあと、sample/index.htmlをブラウザで開いてください。「HTML」「CSS」「JavaScript」のいずれかをクリックすると、選択したタブに対応する内容へ切り替わります。
タブを選択すると、そのタブの識別名がブラウザのlocalStorageへ保存されます。そのため、同じ保存領域を利用できる状態でページへ戻った場合やページを再読み込みした場合は、保存されているタブが自動的に選択されます。
カスタマイズできる内容
index.htmlではタイトル、説明文、「HTML」「CSS」「JavaScript」のタブ名、各タブに表示する文章を変更できます。タブを変更する場合は、各ボタンのdata-tabと対応する内容のdata-panelが同じ値になるように設定します。
style.cssでは全体の最大横幅、余白、背景色、枠線、角丸、タブの高さや文字サイズ、選択中のタブの背景色と文字色、各パネルの余白などを変更できます。script.jsではremember-tab-switch-activeをlocalStorageの保存名として使用しているため、必要に応じて保存名を変更できます。
数値調整
style.css
max-width:700px;
タブ切り替え全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
タブ切り替え全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
タブ切り替え全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
タブ切り替え全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きく表示されます。
min-height:52px;
タブボタンの最小高さです。値を大きくするとタブが高くなります。
padding:14px;
タブボタンの内側余白です。値を大きくするとボタン内部の余白が広がります。
border-radius:12px 12px 0 0;
タブ上部の角丸です。最初の2つの12pxを大きくすると上側の丸みが強くなります。
margin-left:6px;
タブ同士の間隔です。値を大きくすると各タブの間隔が広がります。
transition:0.3s;
タブを切り替えたときに背景色と文字色が変化する時間です。0.3秒で変化し、値を大きくするとゆっくり、小さくすると速く切り替わります。
padding:24px;
タブ内容の内側余白です。値を大きくすると文章と枠線の間隔が広がります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxによって、画面幅に合わせてタブ切り替え全体が縮小されます。また、640px以下では全体の余白を24px 18px、タブの最小高さを48px、文字サイズを14px、タブ内容の余白を20px 16pxへ変更しているため、スマートフォン・タブレット・PCで利用できます。
コメント