CSSタブジェネレーター
タブはあらゆる場所に存在しています、設定画面、ドキュメントサイト、製品ギャラリーなどです。ネイティブHTMLには専用のタブ要素がないため、開発者は自作します。このジェネレーターは、アクティブなタブ用のアクセントカラー、ボタンの角丸、ホバー状態を備えたシンプルなタブバーをHTML+CSSで作成します。マークアップをプロジェクトに貼り付け、タブの切り替えはご自身のJavaScriptで実装してください。
タブの作成方法
-
1
アクセントカラーを選ぶ
アクティブなタブの背景色と文字色です。ブランドに合う色を選んでください。
-
2
角丸を設定する
タブボタンの上の角を丸めます。値を大きくすると柔らかい印象になります。
-
3
ラベルを編集する
出力には「Overview」「Details」「Settings」の3つのボタンがあります。コンテンツに合わせて名前を変更してください。
-
4
コードをコピーする
タブのマークアップには<style>ブロックが付属します。両方をページに貼り付けてください。
-
5
タブ切り替えを追加する
ジェネレーターが作るのは見た目だけです。パネルの表示・非表示を切り替えるため、ボタンを自作のJavaScriptやUIライブラリに接続してください。
正しいアクセシブルなマークアップ
<div class="tabs">
<div role="tablist" aria-label="Product info">
<button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1" tabindex="0">Overview</button>
<button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">Specs</button>
<button role="tab" id="tab-3" aria-selected="false" aria-controls="panel-3" tabindex="-1">Reviews</button>
</div>
<section role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</section>
<section role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</section>
<section role="tabpanel" id="panel-3" aria-labelledby="tab-3" hidden>...</section>
</div>
重要な属性:
role="tablist"がボタン群を囲みます。- 各ボタンに
role="tab"を付け、aria-selectedとaria-controlsを指定します。 tabindexは roving tabindex パターンを使います。アクティブなタブだけが0で、それ以外はすべて-1です。矢印キーで両者の間をフォーカス移動します。- 各パネルに
role="tabpanel"を付け、aria-labelledbyでそのタブを指し示します。 - 非アクティブなパネルには
hiddenを付けます(display: noneだけでは不十分です。支援技術が参照するのはこの属性です)。
キーボードの操作規則
| キー | 動作 |
|---|---|
| Tab | タブリストへの出入り |
| ArrowLeft | 前のタブ(最後に折り返す) |
| ArrowRight | 次のタブ(最初に折り返す) |
| Home | 最初のタブ |
| End | 最後のタブ |
| Enter / Space | フォーカス中のタブをアクティブにする(手動アクティブ化の場合) |
自動起動(フォーカスが移動する際にタブが切り替わる)と手動起動(フォーカスが移動するとEnterキーでタブが起動する)、WAI-ARIAでは両方をサポートしています。視覚障害ユーザーにとっては自動起動の方が便利ですが、タブのコンテンツが複雑に表示される場合には手動起動の方が適しています。
下線スタイル
[role="tablist"] {
display: flex;
border-bottom: 1px solid #e5e7eb;
}
[role="tab"] {
padding: 0.75rem 1rem;
background: transparent;
border: 0;
color: #6b7280;
position: relative;
cursor: pointer;
}
[role="tab"][aria-selected="true"] {
color: #111827;
}
[role="tab"][aria-selected="true"]::after {
content: "";
position: absolute;
left: 1rem; right: 1rem; bottom: -1px;
height: 2px;
background: #2563eb;
}
ピル型スタイル
[role="tab"] {
padding: 0.5rem 0.9rem;
border-radius: 9999px;
border: 0;
background: transparent;
}
[role="tab"][aria-selected="true"] {
background: #2563eb;
color: #fff;
}
フォーカスを可視化する
キーボードでフォーカスが設定される際には、常にフォーカスリングを描画してください:
[role="tab"]:focus-visible {
outline: 2px solid #60a5fa;
outline-offset: 2px;
}
JavaScript
おおよそ:
const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => {
tab.addEventListener('click', () => activate(tab));
tab.addEventListener('keydown', e => {
const i = [...tabs].indexOf(tab);
if (e.key === 'ArrowRight') tabs[(i + 1) % tabs.length].focus();
if (e.key === 'ArrowLeft') tabs[(i - 1 + tabs.length) % tabs.length].focus();
if (e.key === 'Home') tabs[0].focus();
if (e.key === 'End') tabs[tabs.length - 1].focus();
});
});
function activate(tab) {
tabs.forEach(t => {
const panel = document.getElementById(t.getAttribute('aria-controls'));
const active = t === tab;
t.setAttribute('aria-selected', active);
t.setAttribute('tabindex', active ? '0' : '-1');
panel.hidden = !active;
});
tab.focus();
}
合計30行、依存関係はゼロです。
タブとアコーディオンの使い分け
狭い画面ではタブの行が狭くなりやすくなります。一般的なパターンは、デスクトップではタブ表示、モバイル端末ではアコーディオン表示です。ARIAロールを変更することなく視覚表現を切り替えるには、コンテナクエリまたはメディアクエリを使用してください。
よくある質問
アクセシブルなタブには必要です。role="tablist" や role="tab" がないと、スクリーンリーダーはボタンを通常のボタンとして扱い、ユーザーはタブというナビゲーションの慣習を失います。代替として、意味構造が組み込まれたシンプルな <details> / <summary> のアコーディオンを使う方法もあります。
各タブのコンテンツがレンダリングに負担が少ない場合、自動方式(フォーカス移動時にタブがアクティブになる)は適しています。一方、タブの切り替えが大規模な処理(例えば大型フォームの読み込みやレンダリング)を引き起こす場合には、手動方式(フォーカス移動時にEnterキーを押してタブをアクティブにする)の方が適しています。
コンテンツを含むタブ(ドキュメントや製品タブ)については、ハッシュ値(#specs)またはクエリパラメータを使用することで、リンクが特定のタブにディープリンクされ、再読み込み時にアクティブなタブが維持されます。UIタブ(設定ペイン)についてはURLは任意です。
矢印キーによるナビゲーションやARIAステートが欠如しているチェックボックス/ラジオハック方式のみが利用可能です。真にアクセシブルな実装には、この小さなJSスニペットは十分に価値があります。サーバー上でレンダリングされるバックアップ機能が必要な場合は、各タブを独自のURLにリンクし、対応するパネルをサーバー側でレンダリングしてください。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
HTML フォーマッター
ブラウザ内で HTML を 2 または 4 スペースで整形します。HTML はアップロードも検証もされません。
カラーパレットジェネレーター
基準のHEXカラーから、モノクロマティック、類似色、補色、トライアド、テトラードのパレットを生成し、コピーしやすいCSS変数として書き出します。
変更ログジェネレーター
分類した項目から Keep a Changelog 形式の Markdown セクションを作成します。Added、Changed、Fixed、Removed の各カテゴリに項目を貼り付け、Markdown かプレーンテキストを選んで出力をコピーするだけです。
このツールは他の言語でも利用できます
- Generator kart (tabs) CSS [PL]
- Gerador de Abas CSS [PT]
- مولد علامات التبويب CSS [AR]
- Generador de Pestañas CSS [ES]
- Générateur d'onglets CSS [FR]
- CSS 탭 생성기 [KO]
- CSS Tab Generatörü [TR]
- CSS-flikgenerator [SV]
- CSS Tabs Generator [EN]
- Trình tạo tab CSS [VI]
- Generator Tab CSS [ID]
- ตัวสร้างแท็บส์ CSS [TH]
- CSS Tabs Generator [NL]
- CSS-Tabs-Generator [DE]
- CSS标签生成器 [ZH]
- Generatore di schede CSS [IT]
- Генератор вкладок CSS [RU]