固定・スティッキー要素のz-index

スタッキングコンテキストやスクロール動作に関する一般的な落とし穴を含む、fixedおよびsticky配置要素のz-indexの扱い方。

Debugging

詳細な説明

固定・スティッキー要素のz-index

固定要素とスティッキー要素は、ビューポートとスクロール動作と相互作用するため、特別なz-indexの考慮が必要です。

固定要素

.fixed-header {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: var(--z-fixed); /* 例:1030 */
}

スティッキー要素

.sticky-nav {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky); /* 例:1020 */
}

よくある落とし穴:Transform内のFixed

/* 壊れる */
.page-wrapper {
  transform: translateX(0); /* スタッキングコンテキストを作成! */
}

.header {
  position: fixed; /* ビューポートではなく.page-wrapperに対してfixedになる! */
  z-index: 9999; /* 助けにならない */
}

修正戦略

/* 戦略1:祖先からtransformを削除 */
/* 戦略2:fixedの要素をtransformされた祖先の外に移動 */
/* 戦略3:可能な場合はfixedの代わりにstickyを使用 */

複数のスティッキー要素

.top-bar {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
}

.sub-nav {
  position: sticky;
  top: 48px; /* top-barの高さ */
  z-index: calc(var(--z-sticky) - 1);
}

固定/スティッキー要素の推奨z-index

:root {
  --z-sticky: 1020;
  --z-sticky-secondary: 1019;
  --z-fixed: 1030;
  --z-fixed-sidebar: 1029;
}

ユースケース

スティッキーヘッダー、固定サイドバー、レイヤードスティッキーナビゲーションを構築し、他のページ要素と正しく相互作用しスクロール中に適切なz順序を維持する必要がある場合。

試してみる — z-index Manager

フルツールを開く