Vue 中的 Scoped Styles 通过 PostCSS 插件在编译阶段对 CSS 进行特殊处理,实现组件级样式隔离。其核心原理是为每个组件的样式和 HTML 元素添加唯一标识属性,从而限制 CSS 的作用范围。以下是具体实现步骤和原理:
一、实现步骤
1. 为组件模板添加唯一属性
- 编译时:Vue Loader 会在组件模板中的每个 HTML 元素上添加一个唯一的
data-v-xxxxxx
属性(如data-v-f3f3eg9
),xxxxxx
是基于组件文件路径生成的哈希值。
<!-- 编译前 -->
<template>
<div class="container">
<button class="btn">Click</button>
</div>
</template>
<!-- 编译后 -->
<div class="container" data-v-f3f3eg9