scoped样式隔离原理

文章类型:Vue

发布者:hp

发布时间:2025-04-17

一:引言

在Vue中,Scoped Styles是通过在<style>标签上添加scoped属性来实现的,那么,是怎么实现样式隔离的呢?

二:原理

(1):唯一属性生成与注入

       编译时,Vue 为每个带有 scoped 属性的组件生成一个唯一标识符

       将其添加到组件模板内所有元素的 HTML 属性中‌

       在组件渲染时,根元素及所有子元素均会被注入此唯一属性值‌

(2):css选择器重写

       编译过程中,Vue 会解析 <style scoped> 内的 CSS 规则,将原始选择器修改为包含唯一属性选择器的形式

       转换后的选择器仅能匹配带有相同唯一属性的元素,从而实现组件级样式作用域‌

(3):隔离效果实现

       由于不同组件的唯一属性值不同,其对应的 CSS 规则无法跨组件匹配其他元素的属性,因此避免了样式冲突‌

       若需覆盖子组件样式,可通过深度选择器(如 ::v-deep)穿透隔离机制,此时 Vue 不再对穿透规则添加唯一属性限制‌

三:代码

.example[data-v-f3f3eg9] {
  color: red;
}

四:总结

Scoped Styles 通过编译时动态生成唯一属性、重写 CSS 选择器,以及运行时属性注入,实现了组件级别的样式隔离,确保样式仅在当前组件内生效‌