style scoped的作用

在使用Vue-Cli 开发时,我们都知道,在组件的<style></style>加上 scoped属性,可以让<style></style>里的样式只在当前组件生效。

那,这是如何实现的呢?

Vue 对 scoped的渲染规则

  • 对于所有的 Vue 组件,只要设置了<style scoped></style>,Vue就会给该组件生成一个唯一data值。
  • Vue 会将data值作为一个属性添加到组件内所有HTML的DOM节点
  • 如果组件内部包含子组件,这有两种情况
    • 情况一:子组件没有设置<style scoped></style>,则只会给子组件的最外层标签加上当前组件的data属性
    • 情况二:子组件设置了<style scoped></style>,则子组件会自动生成一个自己的唯一data值,然后子组件最外层标签在自己的data属性后面添加父组件的data属性。
  • 对于组件内写在<style scoped></style>里的样式,Vue均会自动在每句css选择器的末尾添加一个当前组件的data属性选择器来私有化样式。

基于上面四点,Vue就实现的scoped的功能。因为,组件scoped里的样式都加了当前组件的唯一标识data属性。也就是说,即使当前组件的class跟其他组件重名,因为每个组件的data属性不一样,当前组件的样式也就不能再其他组件生效了。

渲染规则证明:

  1. 规则一:对于所有的 Vue 组件,只要设置了<style scoped></style>,Vue就会给该组件生成一个唯一data值。

    对于这一点的证明,很容易。我们知道,一般的,Vue 入口文件App.vue里的样式是默认全局样式的,也就没有添加<style scoped></style>。所以,编译出来的结果如下图:

那在<style></style>添加scoped属性后呢?

可见App.vue编译后,增加里data属性。由此可知,组件的data属性存在是依据scoped来控制的。

  1. 规则二:Vue 会将data值作为一个属性添加到组件内所有HTML的DOM节点

  2. 规则三:如果组件内部包含子组件,这有两种情况

    情况一:子组件没有设置<style scoped></style>,则只会给子组件的最外层标签加上当前组件的data属性

    情况二:子组件设置了<style scoped></style>,则子组件会自动生成一个自己的唯一data值,然后子组件最外层标签在自己的data属性后面添加父组件的data属性。

规则二、三结合来证明:

用上面的例子来证,展开App.vue组件得:

App.vue全部HTML的DOM标签都添加的data属性。

仔细看上图,我们发现,<div class="home"></div>标签有两个data属性而且App.vue的data属性在后面。这是应为该标签为Home.vue的最外层标签,而且也添加<style scoped></style>。如下图:

由此可证,子组件设置了<style scoped></style>,则子组件会自动生成一个自己的唯一data值,然后子组件最外层标签在自己的data属性后面添加父组件的data属性。

去掉Home.vue<style scoped></style>后,编译结果如下:

<div class="home"></div>标签的data属性只剩下App.vue的了。所以可证,子组件没有设置<style scoped></style>,则只会给子组件的最外层标签加上当前组件的data属性

  1. **规则四:**对于组件内写在<style scoped></style>里的样式,Vue均会自动在每句css选择器的末尾添加一个当前组件的data属性选择器来私有化样式。

对于这一点,我们直接看控制台可知:

参考文献

vue中style下scope的使用和坑

浅谈Vue的style scoped相关推荐

  1. 浅谈Vue.js的优势

    写在前面 今天小梦跟小伙伴们简简单单聊一下Vue.js的优势.小梦也是刚刚接触Vue.js,在学习一门新的技术之前,我们当然要了解其优势,知道优势在哪更加有利于我们去学习并转换为自己的储备. 浅谈Vu ...

  2. 父子组建传值_浅谈Vue父子组件和非父子组件传值问题

    本文介绍了浅谈Vue父子组件和非父子组件传值问题,分享给大家,具体如下: 1.如何创建组件 1.新建一个组件,如:在goods文件夹下新建goodsList.vue goodsList组件 expor ...

  3. vue 给checkbox 赋值_浅谈vue中关于checkbox数据绑定v-model指令的个人理解

    vue.js为开发者提供了很多便利的指令,其中v-model用于表单的数据绑定很常见, 下面是最常见的例子: {{msg}} js里data初始化数据 new Vue({ el: "#myA ...

  4. java get请求 数组,浅谈vue中get请求解决传输数据是数组格式的问题

    qs的stringify接收2个参数,第一个参数是需要序列化的对象,第二个参数是转化格式,一般默认格式是给出明确的索引,如:arr[0]=1&arr[1]=2 //indices是index的 ...

  5. anchor锚点 antvue_浅谈vue 锚点指令v-anchor的使用

    如下所示: export default { inserted: function(el, binding) { el.onclick = function() { let total; if (bi ...

  6. 浅谈Vue中的虚拟DOM

    Virtual DOM 是JavaScript按照DOM的结构来创建的虚拟树型结构对象,是对DOM的抽象,比DOM更加轻量型 为啥要使用Virtual DOM 当然是前端优化方面,避免频繁操作DOM, ...

  7. 浅谈 Vue 项目优化

    前几天看到大家说 vue 项目越大越难优化,带来很多痛苦,这是避免不了的,问题终究要解决,框架的性能是没有问题的,各大测试网站都有相关数据.下面进入正题 基础优化 所谓的基础优化是任何 web 项目都 ...

  8. Vue 组件 style scoped

    预防各个组件中的css样式出现相同的名称 而导致混乱. 例如 <style>.demo{background-color: #ffaa00;.h {font-size: 20px;colo ...

  9. 浅谈vue的前世今生

    在近几年的web及项目开发中,从社会使用的普遍度以及受欢迎度,vue技术的使用越来越普遍,其各种资料.介绍以及使用攻略内容资料 非常多,那么vue到底什么?它的发展历程又是什么样,其中又有那些改变和优 ...

最新文章

  1. 怎么让wordpress用sqlite3 搭建轻量级博客系统
  2. 【算法导论】【ACM】归并排序总结
  3. 查看 Oracle 是32位还是64位的方法
  4. c++string替换指定位置字符_Excel数据分析:如何替换字符串中的指定字符?
  5. DM365视频处理流程/DM368 NAND Flash启动揭秘
  6. 布尔运算_3dmax教程 - 布尔运算
  7. 1012 数字分类 (20 分)(C语言实现)
  8. vue项目调用jssip_JsSIP和FreeSWITCH整合
  9. Flask初级(十)flash与前台交互post详解
  10. Base64---加密
  11. Bat批处理脚本--常用命令
  12. 天正提示加载lisp_天正加载不了 - 卡饭网
  13. Kaggle首战拿金牌总结!
  14. 游戏计算机中有缓冲内存吗,内存再大都不行!CPU缓存竟这么重要
  15. 导出vm镜像_openstack虚拟机导出镜像
  16. CTO、技术总监、技术经理的区别 互联网技术团队的角色区分
  17. 微信公众号运营,如何有效的推广
  18. python炫酷动画源代码_Python tkinter实现的图片移动碰撞动画效果【附源码下载】...
  19. NER文献溯源-v2核心技术方法
  20. 海豚php 授权价格,数据授权(1.3.2+) · DolphinPHP1.5.0完全开发手册-基于ThinkPHP5.1.41LTS的快速开发框架 · 看云...

热门文章

  1. Win11声卡驱动如何更新?Win11声卡驱动更新方法
  2. Cmake参数修改之CFLAGS和CXXFLAGS
  3. tensorflow训练yolov3模型(检测雪人为例,自己的数据和标签,windows环境)
  4. 杂谈:iphone 4s 会登陆中低端市场吗?
  5. QT学习(四)----360界面制作(1)
  6. 态势感知与安全运营平台详细介绍
  7. 1.浮点数(float)与整型数(int)的转换
  8. [PTA]实验7-3-3 统计大写辅音字母
  9. 使用SQL查询出每门课程的成绩均大于80分的学生姓名
  10. BUUCTF:[HBNIS2018]caesar