Widely available YES。全主要ブラウザで対応済み。Baseline Widely available。大規模プロジェクトで特に推奨。

概要

@layer はCSSカスケードに新しいレイヤー概念を追加する。レイヤーの宣言順で優先度が決まるため、詳細度の競合を回避できる。リセットCSS・ライブラリ・コンポーネント・ユーティリティといった階層構造を明示的に定義可能。

対応ブラウザ

デスクトップ

Chrome 99+
Edge 99+
Safari 15.4+
Firefox 97+

モバイル

Chrome Android 99+
Safari iOS 15.4+
Firefox Android 97+

基本構文

CSS
/* レイヤーの優先順位を宣言 */
@layer reset, base, components, utilities;

@layer reset {
  * { margin: 0; padding: 0; box-sizing: border-box; }
}

@layer base {
  body { font-family: system-ui, sans-serif; line-height: 1.6; }
  a { color: var(--color-primary); }
}

@layer components {
  .btn { padding: 8px 16px; border-radius: 6px; }
  .card { padding: 1rem; border: 1px solid #e5e7eb; }
}

@layer utilities {
  .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
}

実務での使いどころ

  • CSSアーキテクチャの整理

    リセット→ベース→コンポーネント→ユーティリティの優先順位を明示的に管理。

  • サードパーティCSSとの共存

    外部ライブラリのスタイルを専用レイヤーに配置し、プロジェクトのスタイルとの競合を防ぐ。

注意点

  • レイヤーに属さないスタイルは全てのレイヤーより優先される点に注意。
  • !important のレイヤー内優先度は通常とは逆順になる。

アクセシビリティ

  • レイヤーの優先順位ミスでフォーカスインジケーターが消えないよう、ユーティリティレイヤーに a11y 関連スタイルを配置する。