Skip to main content

Scoped styles

Svelte コンポーネントには、そのコンポーネント専用の CSS を置くための <style> 要素を含めることができます。この CSS はデフォルトで スコープ されており、対象のコンポーネント外のページ上の要素には適用されません。

これは、CSS 効果の対象となる要素にクラスを追加することで機能します。このクラスは、コンポーネントのスタイルのハッシュ (例: svelte-123xyz) に基づいています。

<style>
	p {
		/* これはこのコンポーネント内の <p> 要素にのみ影響します */
		color: burlywood;
	}
</style>

詳細度(Specificity)

スコープされた各セレクタは、スコープ用クラス (例: .svelte-123xyz) がセレクタに追加されることで、詳細度(specificity) が 0-1-0 増加します。つまり、コンポーネント内で定義された p セレクタは、グローバルなスタイルシートで定義された p セレクタよりも優先されます。たとえグローバルなスタイルシートが後から読み込まれたとしてもです。

一部のケースでは、スコープ用クラスをセレクタに複数回追加する必要がありますが、2回目以降は :where(.svelte-xyz123) を使用して追加されます。これは詳細度をさらに増加させないためです。

Scoped keyframes

コンポーネントが @keyframes を定義した場合、その name は同じハッシュ手法を使用してコンポーネントにスコープされます。コンポーネント内の animation ルールも同様に調整されます。

<style>
	.bouncy {
		animation: bounce 10s;
	}

	/* これらのキーフレームはこのコンポーネント内でのみ使用できます */
	@keyframes bounce {
		/* ... */
	}
</style>

Edit this page on GitHub

previous next