Vue27 scoped样式
https://www.jianshu.com/p/d80383251fc5
1 简介
当我们在组件中写样式,vue最后会把所有样式合在一起,如果样式名称重复的话就会有问题
style标签上加scoped属性, 组件内的样式只在当前vue组件生效,实现组件的私有化,不对全局造成样式污染,表示当前style属性只属于当前模块.
2 实现私有化的原理
通过观察DOM结构可以发现:vue通过在DOM结构以及css样式上加上唯一的标记,保证唯一,达到样式私有化,不污染全局的作用,如图,样式属性上也会多一个该字符,以保证唯一
可以看出加上scoped
后的组件里的标签都会多一个data-v-469af010
的属性,并且在css样式部分可以看出
由此可知,添加scoped
属性的组件,为了达到不污染全局,做了如下处理:
- 给HTML的DOM节点加一个不重复属性
data-v-469af010
标志唯一性 - 在添加
scoped
属性的组件的每个样式选择器后添加一个等同与“不重复属性”相同的字段,实现类似于“作用域”的作用,不影响全局 - 如果组件内部还有组件,只会给最外层的组件里的标签加上唯一属性字段,不影响组件内部引用的组件( 注意 )
3 使用可能遇到的问题
- 从原理可见,之所以
scoped
可达到类似组件私有化、样式设置“作用域”的效果,其实只是在设置scoped
属性的组件上的所有标签添加一的data
开头的属性,且在标签选择器的结尾加上和属性同样的字段,起到唯一性的作用,但是这样如果组件中也引用其他组建就会出现类似下面的问题:- 父组件无
scoped
属性,子组件带有scoped
,父组件可通过子组件样式选择器修改子组件样式 - 父组件有
scoped
属性,子组件无,父组件无法设置子组件样式,因为父组件的所有标签都会带有data-v-469af010
唯一标志,但子组件不会带有这个唯一标志属 - 父子组件都有,同理也无法设置样式,更改起来增加代码量
- 父组件无
4 解决方案
- 父子组件都有scope,可以在父组件中改子组件样式,可以通过在父组件中添加样式穿透来修改子组件样式, css样式穿透>>> less sass加/deep/前缀,不会影响其他地方子组件使用, 除了样式穿透,还可以通过在父组件中再添加一个没有scope的style,来通过样式选择器去设置子组件样式,且不影响全局样式;
- 父组件添加了scoped子组件子组件无论加不加scoped,父组件不能通过子组件的样式选择器修改子组件样式;
- 父组件不添加scoped,子组件添加scoped,父组件是可以通过子组件样式选择器来修改子组件的样式;
Vue27 scoped样式的更多相关文章
- scoped样式
scoped样式 作用∶让样式在局部生效防止冲突 写法∶<style scoped> 比如School组件和Student组件的样式名一样,当组件汇总到一起时样式会冲突.所以加上scope ...
- vue单文件中scoped样式如何穿透?
在vue文件中的style标签上,有一个特殊的属性:scoped.当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,也就是说,该样式只能适用于当前组件元素.通过该属性, ...
- element-ui公用模态框自定义样式与scoped样式生效问题解决方案
//先插如效果图 里面内容均为传进来的.包括取消与确定按钮,因为每个页面的绑定事件不一样. //下面这个图片为初始样式 //拖动模态框指令需要插件.详情看我下一篇,以下是地址 https://www. ...
- Vue 中 css scoped 样式穿透 ( stylus[>>>] / sass / less[/deep/] )
scoped看起来很好用,当时在Vue项目中,当我们引入第三方组件库时(如使用element-ui),需要在局部组件中修改第三方组件库样式,而又不想去除scoped属性造成组件之间的样式覆盖.这时我们 ...
- vue 可复用swiper以及scoped样式穿透(可以不受scoped的限制来修改样式)
参考: https://blog.csdn.net/dwb123456123456/article/details/82701740https://blog.csdn.net/u014027876/a ...
- 深入理解 vue 中 scoped 样式作用域的规则
哈喽!大家好!我是木瓜太香,今天我们来聊一个 vue 的样式作用域的问题,通常我们开发项目的时候是要在 style 上加上 scoped 来起到规定组件作用域的效果的,所以了解他们的规则也是很有必要的 ...
- Vue学习之--------Scoped样式(2022/8/1)
1.场景 一个页面开发团队进行页面的开发设计.无可避免的会发生样式选择器命名的重复(id的重复.class的重复等).这样间接导致的后果就是.自己的页面样式好好的.在整合一起的时候.可能就会发生样式的 ...
- VUE中 style scoped 修改原有样式
作用域CSS 当<style>标记具有该scoped属性时,其CSS将仅应用于当前组件的元素.这类似于Shadow DOM中的样式封装.它有一些警告,但不需要任何polyfill.通过使用 ...
- vue样式加scoped后不能覆盖组件的原有样式解决方法
<style scoped> </style> 为了vue页面样式模块化,不对全局造成污染,建议每个页面的style标签加上scoped,表示他的样式只属于当前的页面,父组件的 ...
- vue子组件的样式没有加scoped属性会影响父组件的样式
scoped是一个vue的指令,用来控制组件的样式生效区域,加上scoped,样式只在当前组件内生效,不加scoped,这个节点下的样式会全局生效. 需要注意的是:一个组件的样式肯定是用来美化自己组件 ...
随机推荐
- day17-Servlet06
Servlet06 15.HttpServletResponse 15.1HttpServletResponse介绍 每次HTTP请求,Tomcat都会创建一个HttpServletResponse对 ...
- WPF之BackgroundWorker
BackgroundWorker类允许您在单独的线程上执行某个可能导致用户界面(UI)停止响应的耗时操作,下面来介绍一下这个线程类BackgroundWorker,大家可以结合这位大佬的这篇文章,说的 ...
- C#.NET实现二分查找
二分搜索法 定义 二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法. 适用范围 当数据量很大并且有序时,适宜采用该方法. 基本思想 假设数据是按升序排序的,对于给定值key,从序列的 ...
- 数据库可视化工具分享 (DBeaver)
前提:最近公司下发通知,所有开发人员 必须 卸载 Navicat 数据库可视化工具,不知道兄弟们有没有在使用的,可能现在的反应跟我一样,一脸懵逼,Navicat为什么不能使用呢? 有事没事找度娘,于是 ...
- Go语言核心36讲28
我在前面用20多篇文章,为你详细地剖析了Go语言本身的一些东西,这包括了基础概念.重要语法.高级数据类型.特色语句.测试方案等等. 这些都是Go语言为我们提供的最核心的技术.我想,这已经足够让你对Go ...
- Vue使用Element表单校验错误Cannot read property ‘validate’ of undefined
在做注册用户的页面使用表单校验一直提示Cannot read property 'validate' of undefined错误,其实这个错误的提示根据有多种情况,比较常见的就是 ref 的名字不一 ...
- C温故补缺(十三):可变参数
可变参数 stdarg.h 头文件提供了实现可变参数功能的函数和宏.具体步骤如下: 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数,一般传入参数的个数. int func(int n ...
- python-简单模块的使用
提示:简单模块了解掌握 @ 目录 uuid模块 calendar日历模块 time模块 datetime模块 os模块 sys模块 random模块 json和pickle模块 json pickle ...
- 打印九九乘法表,打印金字塔-java
/** * *** ***** 打印如图金字塔 *=i*2-1 (竖)空格数=列数-1 */ public class Circulate{ public static void main(Strin ...
- JavaScript入门②-函数(1)基础{浅出}
01.JS函数基础 1.1.函数定义 函数(方法)就是一段定义好的逻辑代码,函数本身也是一个object引用对象.三种函数构造方式: ① 函数申明:function 函数名(参数){代码},申明函数有 ...