Vue 组件的样式隔离 (Scoped CSS) 原理

梦丽大大_3061

梦丽大大_3061

2026-06-26

455人浏览

原创

vue-component-analyzer
vue-component-analyzer

递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。

下载
vue scoped css 隔离由编译阶段注入 data-v-hash 属性与 css 选择器重写共同实现,vnode 仅携带该属性而不参与作用域逻辑,实际隔离依赖浏览器 css 引擎匹配。

vue 组件的样式隔离 (scoped css) 原理

Vue 的 Scoped CSS 不是靠运行时逻辑控制的,而是编译阶段就定下来的“属性绑定 + 选择器改写”配合浏览器原生 CSS 匹配能力实现的。

编译时给元素加唯一标识

当组件用了 <style scoped></style>,Vue 的编译器(比如 vue/compiler-sfc 或 vue-loader)会为模板中大多数 HTML 元素自动添加一个形如 data-v-f3f264d4 的属性:

  • 这个哈希值(如 f3f264d4)通常基于组件文件路径或内容生成,保证每个组件唯一
  • 普通标签(<div>、<code><p></p>、<span></span> 等)都会被加上该属性
  • 子组件根节点默认也会被注入(但它的内部元素不会带父组件的 data-v-xxx)
  • v-html 内容、<slot></slot> 插槽内容默认不加,除非显式配置
  • 同时重写 CSS 选择器

    对应地,<style scoped></style> 中的样式规则会被 PostCSS 插件(如 postcss-plugin-scoped)处理:

    • .btn { color: red; } → 编译成 .btn[data-v-f3f264d4] { color: red; }
    • 深层穿透写法如 ::v-deep .icon 或 :deep(.icon) → 编译成 [data-v-f3f264d4] .icon(不强制要求 .icon 元素自身带该属性)
    • 这种重写纯属构建时行为,输出的 CSS 已固化,和运行时无关

    运行时只负责渲染,隔离靠浏览器

    VNode 在这里只是“搬运工”:

    • 它如实携带编译器注入的 data-v-xxx 属性(例如 vnode.props['data-v-f3f264d4'] = '')
    • 挂载时把这些属性写入真实 DOM 节点
    • 真正起作用的是浏览器:只有同时满足“类名匹配”且“存在对应 data-v-xxx 属性”的元素,才会被应用该样式
    • 子组件 DOM 默认没有父组件的 data-v-xxx,所以父组件的 scoped 样式自然穿不透

    注意几个关键事实

    Scoped 隔离不依赖 VNode 的运行时判断,也不做动态校验:

    • scopedId 的生成、属性注入、选择器重写,全部发生在构建阶段
    • VNode 是纯数据结构,不理解 data-v-xxx 的语义,也不参与样式逻辑
    • 没有“作用域检查中间件”,没有 runtime 的 scope 对比或拦截
    • 调试时在浏览器里看到的 data-v-xxx 和对应 CSS 规则,就是最终生效的全部依据

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2283

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4903

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5990

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5498

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

783

5

css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

4276

6

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

937

5

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.28

1798

6

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

2023.08.01

3366

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 16.9万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习