Vue中scoped工作原理以及使用情景

解析 Vue 中的 scoped slots 工作原理。 Scoped slots 提供了一种强大的方式来定制组件的内容和行为,同时保持了良好的封装性和可维护性。通过这种方式,子组件可以提供一些上下文信息给父组件,使得父组件能够根据这些信息动态地调整展示内容。 阅读详情

为什么要使用scoped

vue中为了让样式私有化,不至于当前组件的css样式对全局造成污染,添加了scoped属性,但同时也要慎重的使用,因为一旦出现问题,排查起来可能会很麻烦。

scoped工作原理

我们平时开发vue的时候可能会比较好奇,经常会看到data-v-asf23235kd33k在dom元素中出现,其实这就是scoped做的事情,比如我们一个button组件,我们定义了如下scoped样式,给按钮添加一个边框弧度。

<template>
	<button class="button">text</button>
</template>
<style scoped>
.button {
    border-raduis: 1px;
}
</style>

这样最终渲染出来的页面代码应该是这样的

<button class="button" data-v-123lsdfasi32>
    text
</button>
.button[data-v-123lsdfasi32]{
	border-raduis: 1px;
}

可以看到这样一来,本页面定义为scoped下的样式属性,仅可能作用于当前组件,即使该组件被引用,也不会和其他的button属性产生冲突。

总结:

  1. 给DOM节点添加一个标志属性
  2. 给渗透DOM节点的样式属性添加一个属性选择器。(间接提升了样式的权重)

对上述情况做一下补充说明,css属性会叠加,类属性和属性选择权重为 0 0 1 0,叠加后权重变为0 0 2 0,所以通过一个简单的类属性可能无法覆盖了,需要一个id选择器或者内联样式。

实际使用

在引用组件到页面中的时候,总是会有需求说本页面修改一下组件的样式吧,但是由于scoped属性产生的data-v-12jfsjjj只会作用于组件DOM元素的最外层标签,所以父组件的样式不会渗透到子组件中去【这里要自行理解一下为什么无法渗透,不做举例】。如果不使用scoped又怕样式渗透到全局?可以使用渗透scoped穿透,个人理解这样的工作原理为沿用子组件生成的序列号,不重新生成。

.outer /deep/ .button {  // outer为组件外层属性样式名称,没有的话也可以不加
    border-raduis: 1px;
}

注意,如果使用stylus,渗透符号为 >>>。

动态生成的DOM类名可能在scoped中也不会有作用,这个时候也可以添加/deep/来让样式生效。

问题回顾

在之前的项目中,有一次样式污染导致了一个比较严重的后果,我的自定义的一个折叠框,当项目一开始运行的时候不会出问题,但是项目运行一段时间之后,折叠框的内容就都看不到了,DOM节点都是有的,样式却变成了

opacity: 0;

这个问题当时我通过行内样式设置为!important解决掉了,由于开发的是移动端,结果发现这个问题耗费了很长的时间,当时没有细究,今天学习后发现有一个组件使用过程中定义了一个和我一样的class属性,但是他却没有把这个属性放到<scoped>中(当然了,作为一个公共组件组件这样使用肯定是不合理的),直接导致了他的样式合并到了同名的我的样式中,导致了这个问题,希望大家引以为戒。

【学习体会】Lighttools8.4.0:简单光学系统实例 添加球型光源(SphereSource)和表面接收器: 对光线模拟的参数进行设置: 光线追踪-模拟输入 要追踪的光线总数,决定模拟的准确度,总数越多,准确度越高,当然耗时更多 预览光线数量是模拟之后可以看到的示意光线(黑线),一般是100~1000,随意设置 点击,开始模拟: (模拟结果) 如果光线太多,则会出现,可以看到剩余时间 照度分析: 分析-照度显示-光栅图表 ... 阅读详情

相关推荐

第12篇: COZE 实操【自动生成每日英语短视频】详细制作流程

通过以上详细流程,你可以利用 Coze 智能体高效生成每日英语短视频。在实际操作中,若遇到问题或有新的创意需求,欢迎随时与我交流,进一步优化视频制作流程。从左侧节点库中拖拽 “开始” 节点到画布中央,设置主题输入框(如输入 “日常购物英语”),方便后续根据不同主题生成视频。2. 选题策划节点​。3. 内容生成节点​。4. 画面生成节点​。5. 配音生成节点​。6. 音频匹配节点​。7. 视频合成节点​。

AI实操部署-深耕AI领域老菜鸟! 2073

vue2 - 深入理解style标签里的scoped属性

vue2 - 深入理解style标签里的scoped属性

尽日寻春不见春,芒鞋踏遍陇头云。归来笑拈梅花嗅,春在枝头已十分。 1万+

【银行测试】手机银行APP专项项目+测试点汇总(一)

1、手机银行APP转账项目讲解面试官:请介绍一下你所负责的模块如何进行的测试?求职者:好的,我最近测试的是XX银行的手机银行App项目。这个项目里面包含了转账、转账额度调整、网银转账、交易明细、添加账户、存款、投资理财、生活缴费等功能模块。我主要负责了转账模块,这个大模块中包含了智能转账、手机转账、语音转账、预约转账、收款人管理等5个子模块,我首先介绍一下我们生活中使用最多的手机转账子模块。对于转账需要关注的是转账前、转账中、转账后这三个状态下的测试。

m0_70102063的博客 1607

vue 中的 scoped

前言 我们平常在开发过程中特别是Vue技术栈的前端同学们,经常会用到一些UI组件库,特别是element-ui使用的频率是比较高的,我们经常会修改这些UI组件库的默认样式时会使用到深度选择器,大家都知道这么做,有没有想过为什么?趁着疫情在家于是研究了一下,在这里分享一下 scoped的使命与作用 这里用vue做了一个demo,两个页面,一个页面中是掘金的a标签,一个页面是vue的a标签,我们一起看下scoped的作用,给其中一个页面的a标签加上红色,另外一个没有加任何样式,并且没有在style中使用scop

weixin_36723038的博客 6008

Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作指南

本文详细介绍了Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作流程与技巧。内容涵盖从开机预热、校准(SOLT/ECal)、参数设置(频率、点数、功率、IFBW)到连接测量、数据保存分析的全过程,并分享了夹具去嵌入、时域分析等进阶功能与常见问题避坑指南,旨在帮助工程师获得精准可靠的散射参数测试结果。

kotlin6android的博客 402

利用腾讯云轻量服务器快速搭建网站CDN

腾讯云的轻量最近在主机和站长中间可谓是占尽来风头,优秀的线路,低廉的价格使得越来越多的人开始使用腾讯云的轻量级服务器来部署应用。由于腾讯云轻量服务器的海外服务器电信走的是CN2GIA线路带宽30m挺适合做CDN的,我就记录一下如何利用腾讯云香港的轻量服务器搭建一个CDN。 购买服务器 首先选购服务器,最近腾讯云在做活动,力度很大国内备案用户可以选用国内的服务器最低128元/年,未备案的可以选用香港或者新加坡的服务器。 购买链接 服务器系统选Debian、Ubuntu、centos都可以 一键脚

demo_top的博客 2565

Vue中的scoped

什么是scoped 在vue文件中的 style 标签上,有一个特殊的属性:scoped。当一个 style 标签拥有 scoped 属性时,它的 CSS 样式就只能作用于当前的组件,也就是说,该样式只能适用于当前组件元素。通过该属性,可以使得组件之间的样式不互相污染。如果一个项目中的所有 style 标签全部加上了scoped,相当于实现了样式的模块化。 scoped实现原理 转译前: <style scoped> .example { color: red; } </sty

Mr-yang的随笔 8307

基于微信小程序的答题系统

学习视频:《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!5812)]《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_83330193的博客 499

vue中scoped详解以及样式穿透>>>、/deep/、::v-deep

scoped详解以及样式穿透>>>、/deep/、::v-deep,详细分析scoped的原理以及穿透样式的原理

j15087159186的博客 2313

Android 12.0 系统开机设置默认横屏显示

在12.0的系统产品开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从两部分来实现,一部分是开机动画横屏显示,另一部分是系统显示横屏显示,从这两方面就可以做到开机默认横屏显示了。

安卓兼职framework和app工程师的博客 3744

柔性电极材料新突破:清华团队实现0.1mV级脑信号采集精度

清华团队的 0.1mV 级柔性电极突破,不仅是材料科学与神经工程的跨界胜利,更标志着脑机接口从 “信号采集” 向 “神经交互” 的范式转变。当电极与脑组织实现 “柔性共生”,人类首次拥有了窥探大脑微观电活动的 “精密探头”,这既是神经疾病诊疗的里程碑,更是人机融合时代的新起点。随着技术标准化与产业生态的完善,这场始于实验室的 “柔性革命”,正加速向临床病房、智能工厂、消费电子等场景渗透,为脑机接口的大规模应用铺设 “柔性跑道”。:当柔性电极实现 “神经信号的无损捕捉”,如何平衡技术创新与伦理边界?

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2946

Vue Scoped 详细解释

vue中的css作用域、vue中的scoped坑点 一、css作用域   之前一直很困扰css的作用域问题,即使是模块化编程下,在对应的模块的js中import css进来,这个css仍然是全局的。导致在css中需要加上对应模块的html的id/class 使用css选择器 保证css的作用域不会变成全局 而被其它模块的css污染。   在vue中引入了scoped这个概念,scoped的设计思想就是让当前组件的样式不会修改到其它地方的样式,使用了data-v-hash的方式来使css有了它对应模块的

Future1994的博客 1406

基于深度学习的工业零件缺陷检测系统

工业零件缺陷检测系统摘要 本文介绍了一个基于深度学习的工业零件缺陷检测系统解决方案。该系统采用Faster R-CNN目标检测算法,结合PyTorch框架和OpenCV图像处理库,实现了对工业零件表面缺陷(如裂纹、划痕、凹坑等)的自动检测与定位。系统包含完整的开发流程:从数据采集与标注、数据增强预处理、模型构建与训练,到最终的评估与部署。相比传统机器视觉方法,该深度学习方案具有更强的特征表示能力和环境适应性,能够有效提升工业质检的准确率和效率。文章详细阐述了系统架构设计、实现细节和优化策略,并提供了完整的代

huanghm88的专栏 286

vue中慎用style的scoped属性

" 在vue组件中,在style标签上添加scoped属性,以表示它的样式作用于当下的模块,很好的实现了样式私有化的目的,这是一个非常好的机制。但是为什么要慎用呢?在实际业务中我们往往会对公共组件样式做细微的调整,如果添加了scoped属性,那么样式将会变得不易修改。初写这篇文章时,本人没有找到一个好的方法去解决这个问题,后来经过大伙的解答,才让我恍然大悟。" 何为谨慎使用 谨慎使用不是不用...

June.1 8万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Vue|scoped样式

在 Vue.js 中,scoped 是一个非常有用的特性,允许你将样式限制在当前组件的作用域内,避免样式泄漏到其他组件。它是通过 Vue 的单文件组件(.vue 文件)中的 `` 标签实现的。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 4878

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

理解vue中less的scoped和/deep/工作原理

理解vue中less的scoped和/deep/工作原理scoped/deep/实战总结 scoped vue项目一般是单页面、多组件,整个项目共用一个css样式表,有时候我们在写组件的过程中并不希望组件的样式污染全局作用域(毕竟不同组件之间重名的class很正常),因此我们会在组件的样式标签上加上scoped,例如下面这个最基本vue组件框架: <template> ... </template> <script> import ... export defualt

weixin_41604040的博客 9987

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[深入探索] VueJS Scoped CSS 实现原理

使用VueJS进行应用开发, 脱离不了对应用间的模块进行拆分, 将大块界面拆解为组件的过程. 我们可以很方便的在单文件中使用<template>块维护组件的视图, 使用<script>维护组件的逻辑部分, 使用<style>维护组件的样式. 在我们编写 VueJS 组件样式时, 不得忽略的一点就是样式污染. 样式污染产生原因 提及样式污染, 主要要追溯到Webp...

weixin_34128501的博客 416

【Vue】踩坑日记:Scoped下动画无效,曾经以为百利而无一害的Scoped,也有自己的限制

​ 在开发的前期,我清晰的记得使用动画完成了图片放大的效果,当时还写了一篇博文上了热榜。可是过了几天之后,这个效果居然“失效了”,我百思不得其解。一度怀疑自己的代码写的有问题,在优快云等各大博客平台上查找了很久也没找到解决方案。在偶然的尝试下,我发现是scoped影响了动画的效果。真是欲哭无泪,打死我都想不到是scoped的原因。从学习vue的时候就习惯性的在style后面加上scoped,为的是不影响其他组件。曾几何时,我一度以为scoped有百利而无一害。

游坦之的博客 1663

Vue中的scoped和scoped穿透

文章摘自:https://segmentfault.com/a/1190000015932467 一、什么是scoped 在Vue文件中的style标签上有一个特殊的属性:scoped。当一个style标签拥有scoped属性时候,它的CSS样式只能用于当前的Vue组件,可以使组件的样式不相互污染。如果一个项目的所有style标签都加上了scoped属性,相当于实现了样式的模块化。 二、scoped实现原理 Vue中的scoped属性的效果主要是通过PostCss实现的。以下是转译前的代码: .

光脚丫思考的专栏 2万+

vue中使用scoped防止样式污染以及scoped的原理

样式污染示例 一个很简单的例子,在两个组件中都有class名为test的div标签,在ScopedDemo组件中设置test样式,在ScopedChildCpm中没有设置样式。 <template> <div class="scoped-test-wrap"> <div class="test">样式污染</div> <ScopedChildCpm></ScopedChildCpm> </div&gt

Celester_best的博客 3165

scoped——vue组件样式局部化

总而言之,scoped是 Vue 组件化开发中的一个关键特性,它通过为组件的 HTML 元素和 CSS 规则添加唯一的属性,实现了样式的局部作用域,有效防止了全局样式冲突,极大地提高了代码的可维护性和组件的封装性。在绝大多数情况下,为组件的<style>标签加上scoped都是一个非常好的实践。

m0_56861578的博客 1927

Vue 中 CSS scoped 原理

在日常的Vue项目开发过程中,为了让项目更好的维护一般都会使用模块化开发的方式进行。也就是每个组件维护独立的template,script,style。今天主要介绍一下使用为什么在页面渲染完后样式之间并不会造成污染。

前端小白的博客 1420

vue中scoped的使用

vue中scoped的使用 原理: vue通过在DOM结构以及css样式上加上唯一的标记 data-v-469af010,保证唯一, [ ] 概点知识 1.父组件无scoped属性,子组件带有scoped,父组件是无法操作子组件的样式的(原因在原理中可知),虽然我们可以在全局中通过该类标签的标签选择器设置样式,但会影响到其他组件 2.父组件有scoped属性,子组件无,父组件也无法设置子组件样式,因为父组件的所有标签都会带有data-v-469af010唯一标志,但子组件不会带有这个唯一标志属性,与1同

小刘不吃肉肉 1618

Vue Scoped原理详解

本文介绍了Vue中的Scoped CSS特性,它通过在<style>标签添加scoped属性实现样式局部作用域。主要原理是为组件元素添加唯一属性(如data-v-xxx)并通过PostCSS处理样式选择器。文章还详细讲解了深度选择器的使用场景和方法,分析了Scoped CSS的优点(样式隔离、性能优化)和注意事项(影响子组件根元素、不适用于v-html内容)。针对常见问题提供了解决方案,如使用:deep()修改第三方组件样式、:global()处理动态内容样式。最后强调理解Scoped CSS原理.

qq_44919431的博客 1089

vue中的scoped坑点

今天在覆盖iview组件样式的时候发现一个问题,就是无法覆盖组件原有的样式,最后在github的issue中找到了答案: 不要使用scoped属性。于是我查找了下关于scoped的文章。 我们假设把这种组件叫做模块私有组件,其他的未加scoped的叫做模块一般组件。通过查看DOM结构发现:vue通过在DOM结构以及css样式上加唯一不重复的标记,以保证唯一,达到样式私有化模块化的目的。

sdo2605587的博客 1万+

vue---style scoped属性的作用和原理、scoped穿透

使用vue开发项目时,发现style标签中存在一个属性scoped。 scoped 属性是 HTML5 中的新属性,是一个布尔属性。如果使用该属性,则样式仅仅应用到 style 元素的父元素及其子元素。 作用:实现组件的私有化,不对全局造成样式污染,表示当前style属性只属于当前模块。 原理:scoped会在DOM结构及css样式上加上唯一性的标记【data-v-something】属性,即CSS带属性选择器,以此完成类似作用域的选择方式,从而达到样式私有化,不污染全局的作用。 scope

maidu_xbd的博客 2万+
上一篇: 使用antd的Row、Col组件绘制word申请表
下一篇: vue mounted方法执行多次问题的解决方案
Run_youngman
博客等级 码龄12年 355粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值