0

0

CSS样式作用域控制_Scoped CSS在Vue组件中的引入

P粉602998670

P粉602998670

发布时间:2026-02-26 15:23:02

|

400人浏览过

|

来源于php中文网

原创

vue的scoped样式通过编译时为选择器和元素添加唯一data-v-xxx属性实现伪作用域隔离,非真正的shadow dom;穿透需用:deep(),且仅括号内选择器生效。

css样式作用域控制_scoped css在vue组件中的引入

Vue单文件组件里

它不是简单地给元素加个属性选择器,而是让CSS只作用于当前组件的根元素及其子树——但这个“只作用”是靠编译时加属性选择器模拟出来的,不是运行时隔离。

编译后,<style scoped></style> 里的 .btn 会变成类似 .btn[data-v-f3f518dc],同时 Vue 会给组件所有顶层元素自动加上 data-v-f3f518dc 属性。所以它本质是 CSS 层面的“作用域伪装”,不是 Shadow DOM 那种真正隔离。

  • 子组件的根元素也会被自动打上这个 data-v-xxx 属性,但它的内部元素不会——除非你显式用 deep:deep()
  • 如果子组件用了 inheritAttrs: false,又没手动把 $attrs 挂到根元素上,那个 data-v-xxx 属性可能就丢了,导致样式失效
  • <style scoped></style><style></style> 标签外的全局样式、CSS-in-JS、或第三方库注入的样式完全没影响

想穿透scoped样式改子组件内部元素,该用 :deep() 还是 /deep/

/deep/ 是老写法,Vue CLI 4.5+ 和 Vite 默认已弃用;现在统一用 :deep()(函数调用语法),它明确告诉编译器:这里的内容不加 data-v-xxx 属性前缀。

注意 :deep() 只能用在 <style scoped></style> 内部,且只对括号里的选择器生效,外面的仍受 scoped 约束。

立即学习前端免费学习笔记(深入)”;

启山智软物流配送系统
启山智软物流配送系统

启山智软物流配送是基于Spring Cloud 和 Vue.js的JAVA物流配送系统。包含总控制后台 、城市合伙人(商家pc端)、 区域团长后台 、用户端小程序 、手机H5等多个操作模块。为响应用户需求我们新增了后台自定义装修组件模块,使页面更加美观,操作更加灵活简便。淘宝商品CSV一键导入,提升用户使用感。还有与众不同的管理台侧边栏设计,打破传统管理台样式。 另有公众号接龙、引导页上传、区域团

下载
  • 写法::deep(.el-input__inner) { border: 2px solid red; } —— 只有 .el-input__inner 会穿透,前面的父选择器依然带 data-v-xxx
  • 不能写成 :deep(.parent .el-input__inner) 然后指望整个链路都穿透;只有括号里那部分被豁免
  • Vite + Vue 3 中,::v-deep() 已彻底移除,强行用会报错;/deep/ 虽然部分构建工具还兼容,但属于技术债

scoped样式和CSS Modules谁更适合大型项目

Vue 的 scoped 是轻量级、零配置的局部化方案;CSS Modules 是更严格的模块化系统,需构建工具支持,生成的类名更可控,但要多写 import styles from './xxx.module.css':class="styles.xxx"

如果你的项目已经重度依赖 class 绑定、动态 class 切换、或需要服务端渲染时保证 class 名稳定,CSS Modules 更可靠;但若只是避免样式污染、团队习惯直接写 class="xxx"scoped 足够用。

  • scoped 编译出的 data-v-xxx 属性在 SSR 中也存在,但 class 名本身不唯一,不利于缓存和调试
  • CSS Modules 的 class 名默认带哈希(如 Button_button__aBc12),天然支持按需导出、类型提示(配合 @types/css-modules
  • 两者不互斥:可以 <style module></style><style scoped></style> 并存,但一般不这么干——语义冲突

为什么有时候scoped样式突然不生效了

最常见原因不是写错了,而是组件结构或渲染时机导致属性没挂上。

比如异步加载子组件、使用 v-if 切换、或子组件根节点是 <teleport></teleport> 目标容器——这些场景下,data-v-xxx 属性可能根本没出现在目标 DOM 上。

  • 检查浏览器开发者工具里对应元素有没有 data-v-xxx 属性;没有就说明 Vue 没把它当本组件 DOM 渲染
  • <teleport to="#modal-root"></teleport> 内的内容完全脱离当前组件作用域,scoped 样式对其无效,必须用 :deep() + 全局样式配合,或单独抽离 CSS
  • 使用 defineAsyncComponent 时,如果异步组件还没加载完成,占位用的 <div> 可能没带 <code>data-v-xxx,等真实组件挂载后才补上——此时样式会闪一下

    scoped 的边界感很弱,它依赖 Vue 的模板编译和 DOM 注入逻辑;一旦跳出这个路径,就得靠手动控制或换方案。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

831

2023.08.22

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

707

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

22

2025.12.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

526

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

494

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

638

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5802

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

492

2023.09.01

Golang 实际项目案例:从需求到上线
Golang 实际项目案例:从需求到上线

《Golang 实际项目案例:从需求到上线》以真实业务场景为主线,完整覆盖需求分析、架构设计、模块拆分、编码实现、性能优化与部署上线全过程,强调工程规范与实践决策,帮助开发者打通从技术实现到系统交付的关键路径,提升独立完成 Go 项目的综合能力。

1

2026.02.26

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

CSS教程
CSS教程

共754课时 | 36.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号