Featured image of post ネイティブCSSネスト(CSS Nesting)の標準構文と注意点 Featured image of post ネイティブCSSネスト(CSS Nesting)の標準構文と注意点

ネイティブCSSネスト(CSS Nesting)の標準構文と注意点

ブラウザ標準のCSS Nesting(ネイティブCSSネスト)の仕様と実践的な使い方を詳細解説。SassやLessなどのプリプロセッサなしで入れ子構造を実現する正しい構文ルール、セレクタ結合の挙動、Sassとの互換性の違いや注意点・制限事項までを網羅的に紹介します。

はじめに

これまで、CSSで入れ子構造(ネスト)のスタイルを簡潔に書くためには、Sass(SCSS)やLess、PostCSSといったプリプロセッサの導入が不可欠でした。

しかし、CSSの標準仕様として CSS Nesting(ネイティブCSSネスト) の策定が進み、現在では主要なすべてのモダンブラウザで、プリプロセッサなしの素のCSSファイルでネスト記述が動作するようになっています。

本記事では、この標準化されたCSS Nestingの正しい書き方、注意すべき挙動、そしてSassのコンパイル結果との細かな違いについて解説します。


1. ネイティブCSSネストの基本形

標準のCSSネストは、Sassとほぼ同様の直感的な記法で記述できます。

記述例

.card {
  background-color: #fff;
  padding: 20px;
  border-radius: 8px;

  /* 子要素を直接ネストして指定する */
  .card-title {
    font-size: 1.5rem;
    color: #333;
  }

  /* & 記号を使って疑似クラス(hoverなど)を指定する */
  &:hover {
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
  }
}

かつての仕様案では、ネストの先頭に &(アンパサンド)を付けることが必須でしたが、現在の最終仕様では & なしで直接クラス名(.card-title)やHTML要素(h3)をネストして記述することが可能 になっています。


2. Sassとの違いと注意点

長年Sassを書いてきた開発者が最も注意しなければならないのが、「BEMなどのクラス名結合(文字列結合)には使えない」 という点です。

Sass(SCSS)でよくある書き方(文字列結合)

/* Sassでは動くが、標準CSSネストでは動かない! */
.button {
  display: inline-block;
  
  &--large { /* .button--large にコンパイルされる */
    padding: 15px 30px;
  }
}

標準CSSネストでの挙動(エラーまたは意図しない動作)

標準CSSのネストでは、& は「親のセレクタのオブジェクト(要素)そのもの」を指し示すプレースホルダーとして機能します。文字列の単純結合はできないため、上記の &--large は無効な指定になります。

正しい記述方法

標準CSSでネストする場合は、クラス名の部分結合ではなく、クラス全体を指定する必要があります。

.button {
  display: inline-block;

  &.button--large { /* または &.btn-large のように結合 */
    padding: 15px 30px;
  }
}

3. &(アンパサンド)を後ろに置くパターン

& のもう一つの便利なテクニックは、ネストの先頭だけでなく、末尾や中間にも配置できる点です。これを使うことで、「特定の親要素の中にいる時だけスタイルを変更する」という指定が、子要素のスタイルブロックの中に内包して書けるようになります。

実装例

.theme-text {
  color: #333; /* デフォルトカラー */

  /* 親要素に .dark-mode クラスがついている場合 */
  .dark-mode & {
    color: #fff; /* ダークモード時のカラー */
  }
}

これは、従来の .dark-mode .theme-text { color: #fff; } と全く同じセレクタ指定になります。


まとめと導入の判断

CSS Nestingは、すでにすべてのモダンブラウザで実装が完了しています。

  • Sassからの完全移行の判断: 変数の管理、Mixin(関数)による複雑なスタイル生成、BEMの文字列結合(&__child)などを多用しているプロジェクトでは、引き続きSassやPostCSSを使う意義があります。
  • ネイティブCSSネストが向いている場面: コンポーネントライブラリの作成や、ビルドプロセスを極限までシンプルに保ちたい(Sassコンパイルの待ち時間をなくしたい)静的サイトの制作においては、ネイティブCSSネストへの移行は非常に有効です。

Web標準のネスト構造のルールを正しく理解し、無駄のない美しいスタイルシートを設計していきましょう。

最終更新 2026/06/13 23:11 JST