1分でわかるCSSの適用範囲を限定できる@scopeの使い方

@scopeとは

@scopeはCSSの新しい機能で、セレクタの適用範囲を明示的に設定することができます。

これにより、特定の範囲内の要素に対してのみスタイルを適用可能になり、より構造化されたスタイルシートの作成ができます。

@scopeを使わない場合

例えば以下のようなHTMLとCSSがあるとします。

<div class="red">
  <p>red</p>
  <div class="blue">
    <p>blue</p>
    <div class="red">
      <p>red</p>
    </div>
  </div>
</div>
.red {
  background: pink;
}

.red p {
  color: red;
}

.blue {
  background: cyan;
}

.blue p {
  color: blue;
}

すると以下のような結果になります。

red

blue

red

見ての通り、最後のredが青文字になっています。

これはCSSでは詳細度が同じ場合は最後に適用されるものが反映されるからです。

仮に.redと.blueの順番を変えると今度は以下のようになります。

.blue {
  background: cyan;
}

.blue p {
  color: blue;
}

.red {
  background: pink;
}

.red p {
  color: red;
}

red

blue

red

CSSコードの最後に「.red p」が書かれているので、すべてに「color: red;」が適用されています。

@scopeを使った場合

前述のコードを@scopeに書き換えると以下のようになります。

@scope (.red) {
  :scope {
    background: pink;
  }

  p {
    color: red;
  }
}

@scope (.blue) {
  :scope {
    background: cyan;
  }

  p {
    color: blue;
  }
}

:scopeは@scopeで指定した要素にプロパティを適用する場合に用います。

このCSSコードで結果を確認すると、同じ詳細度でも記述順ではなく@scopeで指定した範囲に適用されることが確認できます。

CSS @scopeを使用した結果

CSS @scopeのサンプル

カテゴリーcss