CSS 入れ子アットルール

本体にスタイルルールを含むアットルールは、 CSS の入れ子を使って別のスタイルルールの中に入れ子にすることができます。アットルール内に入れ子になったスタイル ルールは、最も近い祖先のスタイル ルールから入れ子のセレクタ定義を取得します。入れ子になったアットルールの内部には、 & {...} ブロックに入れ子になっているかのように動作するプロパティを直接含めることができます。

入れ子にすることができるアットルール

入れ子の @media アットルール

この例には CSS のブロックが 3 つあります。 1 つ目は典型的な入れ子アットルールの書き方を表し、 2 つ目はブラウザーが構文解析するとおりに入れ子を展開した書き方を表し、 3 つ目は入れ子でない同等のものを表しています。

入れ子の CSS

css
.foo {
  display: grid;
  @media (orientation: landscape) {
    grid-auto-flow: column;
  }
}

展開した入れ子 CSS

css
.foo {
  display: grid;
  @media (orientation: landscape) {
    & {
      grid-auto-flow: column;
    }
  }
}

入れ子を使用しない同等のもの

css
.foo {
  display: grid;
}

@media (orientation: landscape) {
  .foo {
    grid-auto-flow: column;
  }
}

多重に入れ子になった @media アットルール

アットルールは他のアットルールの中に入れ子にすることができます。以下にその例と、入れ子にしない場合の書き方を示します。

入れ子のアットルール

css
.foo {
  display: grid;
  @media (orientation: landscape) {
    grid-auto-flow: column;
    @media (min-width: 1024px) {
      max-inline-size: 1024px;
    }
  }
}

入れ子を使用しない同等のもの

css
.foo {
  display: grid;
}
@media (orientation: landscape) {
  .foo {
    grid-auto-flow: column;
  }
}
@media (orientation: landscape) and (min-width: 1024px) {
  .foo {
    max-inline-size: 1024px;
  }
}

カスケードレイヤーの入れ子 (@layer)

カスケードレイヤー子レイヤーを作成するために入れ子にすることができます。これらは . (ドット)で接続します。

親&子レイヤーの定義

まず、名前付きカスケードレイヤーを使用する前に、スタイル割り当てなしで定義します。

css
@layer base {
  @layer support;
}

ルールを入れ子になったレイヤーに割り当てる

ここでは .foo セレクターはそのルールを base @layer に割り当てています。入れ子になった support @layerbase.support サブレイヤーを作成し、 & 入れ子セレクターは .foo .bar セレクターのルールを作成するために使用されます。

css
.foo {
  @layer base {
    block-size: 100%;
    @layer support {
      & .bar {
        min-block-size: 100%;
      }
    }
  }
}

入れ子を使用しない同等のもの

css
@layer base {
  .foo {
    block-size: 100%;
  }
}
@layer base.support {
  .foo .bar {
    min-block-size: 100%;
  }
}

関連情報