z-Index
UI要素の重なり順を一貫したルールで管理します。Dropdown、Modal、Tooltipなどのレイヤーが衝突しない設計です。
z-Index Scale
基本値とセマンティックトークンの2つのカテゴリで構成されています。
基本値(0-50)
0
z-010
z-1020
z-2030
z-3040
z-4050
z-50セマンティック値
z-sticky100スティッキーヘッダー、固定要素
z-dropdown1000ドロップダウンメニュー、セレクト
z-overlay1100オーバーレイ、バックドロップ
z-modal2000モーダルダイアログ
z-popover2100ポップオーバー、ホバーカード
z-tooltip2200ツールチップ
z-toast3000トースト通知(最上位)
| Token | Value | ユースケース |
|---|---|---|
z-sticky | 100 | スティッキーヘッダー、固定要素 |
z-dropdown | 1000 | ドロップダウンメニュー、セレクト |
z-overlay | 1100 | オーバーレイ、バックドロップ |
z-modal | 2000 | モーダルダイアログ |
z-popover | 2100 | ポップオーバー、ホバーカード |
z-tooltip | 2200 | ツールチップ |
z-toast | 3000 | トースト通知(最上位) |
Interactive Demo
各要素をクリックして、z-indexによる重なり順を確認できます。
Base Content
z-index: 0Dropdown
z-1000Modal Dialog
z-index: 2000ドロップダウンより前面に表示されます
Tooltip
z-2200Recommended Values
各UIコンポーネントに適したz-indexトークン
Header (sticky)
z-sticky100
Dropdown Menu
z-dropdown1000
Select Options
z-dropdown1000
Backdrop/Overlay
z-overlay1100
Modal/Dialog
z-modal2000
Popover
z-popover2100
Tooltip
z-tooltip2200
Toast/Notification
z-toast3000
Layer Hierarchy
z-indexの値が高いほど前面に表示されます。
Base通常コンテンツ
z-0-50Sticky固定ヘッダー
z-100Dropdownメニュー
z-1000Overlay背景マスク
z-1100Modalダイアログ
z-2000Popoverポップアップカード
z-2100Tooltipホバーヒント
z-2200Toast通知メッセージ
z-3000上に行くほどz-index値が高く、前面に表示
Common Issues
z-index関連のよくある問題と解決方法
モーダルがドロップダウンの後ろに隠れる
→ ドロップダウンが新しいスタッキングコンテキストを作成している
✓ Portalを使用してモーダルをbody直下にレンダリング
z-index: 9999でも要素が前面に来ない
→ 親要素のスタッキングコンテキストに制限されている
✓ 親要素のz-indexを確認、またはisolation: isolateを使用
position: fixedの要素がモーダルの後ろに
→ fixedでも適切なz-indexが必要
✓ z-modalより高いz-index(z-toast等)を使用
Stacking Context
スタッキングコンテキストとは
z-indexは同じスタッキングコンテキスト内でのみ比較されます。 新しいスタッキングコンテキストは以下の場合に作成されます:
- •position: absolute/relative/fixedと z-index が設定された要素
- •opacity が 1 未満の要素
- •transform、filter、perspective が設定された要素
- •isolation: isolate が設定された要素
Best Practices
✓
推奨
- ✓セマンティックトークン(z-modal等)を使用する
- ✓Portalを使用してモーダルをbody直下に配置
- ✓isolation: isolateでコンテキストを明示的に制御
- ✓z-indexの階層設計を事前に計画する
✕
避けるべき
- ✗z-index: 9999 などの任意の大きな値
- ✗問題が起きるたびにz-indexを増やす
- ✗スタッキングコンテキストを考慮しない実装
- ✗ハードコードされたz-index値の乱用