CSSツール

無料 CSS @scopeルールビルダー

BEMやCSS ModulesなしでDOMサブツリーをスタイリングするCSS @scopeルールを生成します。

ツールを読み込み中...

CSS @scopeルールビルダーとは

CSS @scope at-rule(Baseline 2025、Chrome 118+)を使用すると、開発者はスタイルルールの境界を定義し、その効果を特定のDOMサブツリーに制限できます。これにより、BEM、CSS Modules、Shadow DOMを使用せずに、古典的なCSSスコーピング問題を解決します。@scopeルールは、上限セレクタ(スコープルート、必須)とオプションの下限セレクタ(スコープリミット、オプション)を受け取ります。@scope内のスタイルはサブツリーの外に漏れず、@scope外のスタイルは意図的なセレクタマッチングなしではスコープルールをオーバーライドしません。スコープルールはスコープ外のグローバルルールよりも特異度が低く、オーバーライドが予測可能で意図的になります。

クイックアンサー

CSS @scopeはスタイルルールをDOMサブツリーに制限し、BEMやShadow DOMなしでスタイルの漏れを防ぎます。上限(スコープルート)とオプションの下限(スコープリミット)を設定します。スコープルールは予測可能なオーバーライドのために、スコープ外のルールよりも特異度が低くなります。Chrome 118+、Safari 17.4+、Firefox 128+(Baseline 2025)。

Last updated: 2026-06-02

制限事項

  • @scopeは新しいスタッキングコンテキスト、z-index分離、または包含を作成しません。セレクタマッチングのみを制限します。z-index、CSSカウンター、カスタムプロパティなどのプロパティはスコープ境界を越えて相互作用します。
  • 広すぎるスコープルートセレクタ(多くの場所で使用される一般的なクラスなど)は、予期しないスタイル適用を引き起こす可能性があります。各@scopeルールはスコープルートに一致するすべての要素に対して評価されるため、複雑なスコープツリーはDOM要素が多いページのパフォーマンスに影響する可能性があります。
  • @scopeをサポートしていないブラウザでは、at-rule内のルールはスコープ解除されずに完全に無視されます。広いブラウザサポートが必要な場合は、フォールバックとして@scopeブロックの外側にスコープルールをスコープ解除されたルールとして複製してください。

Sources:MDN Web Docs · W3C Specifications · jquery.app on GitHub

使い方

  1. スコープルートセレクタを入力します。上限を定義する要素です。@scopeブロック内のすべてのスタイルルールは、この要素のサブツリー内にのみ適用されます。
  2. オプションでスコープリミットセレクタを追加します。スコープスタイルが適用される深さを制限する下限です。スタイルルールはスコープリミット内またはそれより深い要素には適用されません。
  3. @scopeブロック内に標準のCSS構文を使用してCSSスタイルルールを記述します。これらのルールは、同じ要素をターゲットとするスコープ外のグローバルルールよりも特異度が低くなります。
  4. 生成された@scope CSSをコピーしてスタイルシートに追加します。最も予測可能なカスケードのために、グローバルデフォルトの後、コンポーネント固有のオーバーライドの前に@scopeルールを配置します。

主な用途

  • ウィジェットスタイルをそのコンテナ要素にスコープしてページの残りの部分に漏れないようにし、すべての要素にBEMクラス命名を不要にします。
  • より高い特異度のセレクタや!importantを使用せずに、メインコンテンツエリアとサイドバーで異なるリンクスタイルを適用します。
  • サードパーティの埋め込みスタイルをそのラッパーdivに制限し、埋め込みの内部CSSが周囲のページレイアウトに影響しないようにします。

用途

使用例

スタイルが分離されたサイドバーウィジェット

ニュースサイトに、異なるリンク色とフォントサイズが必要なサイドバーウィジェットがあります。@scope (.sidebar) { a { color: #555; font-size: 14px; } }を使用すると、リンクスタイルは.sidebar内にのみ適用されます。メインコンテンツエリアのリンクは影響を受けず、サイドバー要素にBEMクラスの名前変更は不要です。

下限のあるスコープカードスタイル

コンポーネントライブラリに、直接の子要素はスタイル設定するが、ネストされたカードインスタンス内の要素は変更しないカードコンポーネントがあります。@scope (.card) to (.card-inner) { ... }を使用すると、スコープスタイルは.card内に適用されますが、.card-innerの前で停止し、ネストされたカードレイアウトでのスタイル競合を防ぎます。

よくあるミス

  • スコープルールはグローバルルールよりも特異度が低いことを理解せずに@scopeを使用する。グローバルルールとスコープルールが同じ要素をターゲットする場合、グローバルルールが優先されます。これは簡単なオーバーライドのために意図的ですが、スコープルールが常に適用されると期待する場合に驚くことがあります。
  • @scopeが新しいスタッキングコンテキストや包含を作成しないことを忘れる。Shadow DOMとは異なり、@scopeはCSSカウンター、z-index、ペイント包含を分離しません。DOMサブツリー内のセレクタマッチングのみを制限します。
  • 広すぎるスコープルートセレクタ(divや*など)で@scopeを適用する。これによりスコーピングの目的が損なわれ、ブラウザが多くの要素に対してスコープルートを評価する必要があるため、予期しないパフォーマンス影響が発生する可能性があります。

検証

  1. Chrome 118+で、生成された@scope CSSを複数のセクションがあるページに適用します。@scope内のスタイルがスコープルートサブツリー内の要素にのみ適用され、その外側の同一要素には適用されないことを確認します。
  2. スコープルールと同じ要素をターゲットにするスコープ解除されたグローバルルールを追加します。グローバルルールが優先されることを確認し、スコープルールがグローバルルールよりも特異度が低いことを確認します。

FAQ

CSS @scopeルールビルダーのFAQ

@scopeはスタイル分離においてShadow DOMとどう違いますか?

Shadow DOMは完全なカプセル化を提供します。シャドウルート内のスタイルはホストページに影響できず、ホストページのスタイルはシャドウツリーに侵入できません。@scopeはセレクタマッチングをDOMサブツリーに制限するだけですが、継承可能なプロパティ(font-familyやcolorなど)の継承を防がず、新しいドキュメントフラグメントを作成せず、CSSカウンター、z-index、カスタムプロパティを分離しません。@scopeはより軽量でDOM再構築を必要としませんが、Shadow DOMはより強力な保証をより重要なDOM変更のコストで提供します。

@scopeはBEMやCSS Modulesを置き換えますか?

@scopeはBEMやCSS Modulesを減らしますが、完全に置き換えるわけではありません。単一のDOMツリー内のシンプルなコンポーネントスコーピングでは、@scopeはスコープ境界内でのBEMのブロック要素修飾子命名の必要性を排除できます。ただし、深くネストされたコンポーネント、複数スコープ、クロスフレームワークのコンポーネント境界では、BEMやCSS Modulesがより明確な命名と予測可能な動作を提供します。@scopeは既存の方法論の補完として最適に使用され、完全な置き換えではありません。

@scopeルールをネストするとどうなりますか?

ネストされた@scopeルールはサポートされています。内部の@scopeルールは、外部スコープのルートに対して相対的に評価されます。内部スコープのスタイルルールは、両方のスコープ境界に一致する要素に適用されます。これは、子コンポーネントのスコープを親スコープコンテキスト内で評価する必要があるコンポーネント階層に便利です。スコープルールの低い特異度は各スコープレベルに独立して適用されます。

CSS @scopeをサポートしているブラウザは?

@scopeはBaseline 2025で、Chrome 118+、Edge 118+、Safari 17.4+、Firefox 128+でサポートされています。これは2026年半ば現在、世界のブラウザ使用量の90%以上をカバーしています。@scopeはサポートされていないブラウザ向けのフォールバックスタイリングとともに本番環境で安全に使用できます。@scope内のルールは、at-ruleをサポートしていないブラウザではスコーピングなしでグローバルに適用されます。

関連ツール

その他のcssツール

こちらもお試しください

こちらもお試しください