作用域样式

Svelte 组件可以包含一个 <style> 元素,其中放置属于该组件的 CSS。默认情况下,这些 CSS 是_作用域化_的,意味着样式不会应用到该组件之外的页面上的任何元素。

其原理是向受影响的元素添加一个类,该类基于组件样式的哈希值(例如 svelte-123xyz)。

<style>
	p {
		/* this will only affect <p> elements in this component */
		color: burlywood;
	}
</style>

优先级(Specificity)

由于添加了作用域类(例如 .svelte-123xyz),每个作用域选择器都会获得 0-1-0 的优先级提升。这意味着(例如)组件内定义的 p 选择器会优先于全局样式表中定义的 p 选择器,即使全局样式表加载得更晚。

在某些情况下,作用域类必须多次添加到同一个选择器上,但第一次出现之后,它会以 :where(.svelte-xyz123) 的形式添加,以避免进一步提升优先级。

作用域化的关键帧

如果组件定义了 @keyframes,其名称会以相同的哈希方式被限定在组件作用域内。组件中的任何 animation 规则也会做相应调整:

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

	/* these keyframes are only accessible inside this component */
	@keyframes bounce {
		/* ... */
	}
</style>