vue中scoped与/deep/深度选择器原理总结

2023-11-02

最近在写一个vue+element-ui项目,使用element-ui某些组件修改样式时,老是需要加上/deep/深度选择器,以前只是知道这样用,但是还不清楚他的原理,这次就来好好的梳理一下

1. 首先我们需要知道css中的属性选择器

w3c解释:对带有指定属性的 HTML 元素设置样式。
可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。
注释:只有在规定了 !DOCTYPE 时,IE7 和 IE8 才支持属性选择器。在 IE6 及更低的版本中,不支持属性选择。

下面的例子为带有 title 属性的所有元素设置样式:

	[title]{
		color:red;
	}
2. vue中<style>加上scoped会有什么变化

先写一段css

<style lang="scss">
	.login {
	  background: url('~@/assets/images/bg.png') no-repeat;
	  background-size: cover;
	  min-height: 100vh;
	  display: flex;
	  justify-content: center;
	  align-items: center;
	  .login-form {
	    max-width: 380px;
	  }
	}	
</style>

没有加scoped,看一下浏览器渲染结果
在这里插入图片描述
在这里插入图片描述

加上了scoped,再看一下有什么变化
在这里插入图片描述
在这里插入图片描述
发现多了一个data-v-hash属性,也就是说加了scoped,PostCSS给一个组件中的所有dom添加了一个独一无二的动态属性,然后,给CSS选择器额外添加一个对应的属性选择器来选择该组件中dom,这种做法使得样式只作用于含有该属性的dom——组件内部dom,可以使得组件之间的样式不互相污染。

3. 为什么加上scoped时,修改第三方组件需要加上 /deep/

我在实际中遇到的例子:我使用了element-ui的el-card组件,想要修改它的头部样式,于是在调式工具中查看了他的类名
在这里插入图片描述
发现是el-card__header,然后对样式修改,发现并没有效果

.el-card__header {
  padding: 13px 20px;
}

因为渲染出来的选择器是.el-card__header[data-v-hash],而子组件dom上没有这个[data-v-hash]这个属性,所以选择不到这个dom,可在Sources下找到以下代码

在这里插入图片描述

于是加了/deep/,嗯,这次起效果了,但是为什么这样就能起效果

/deep/ .el-card__header {
  padding: 13px 20px;
}

查看了下样式表,发现多了个当前组件的[data-v-hash]属性选择器
在这里插入图片描述
再看一下编译完的文件
在这里插入图片描述

由上得出/deep/原理是在样式表上加了父组件的[data-v-hash]这个属性选择器,达到控制子组件样式的效果

结论
  1. 加上scoped会在当前组件的dom加上[data-v-hash]属性,在css中加上[data-v-hash]属性选择器,达到组件之间的样式不互相污染的效果。
  2. 使用/deep/深度选择器会在css中加上[data-v-hash] 这个父代选择器来控制子组件样式,如[data-v-hash] .el-card__header
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue中scoped与/deep/深度选择器原理总结 的相关文章

  • 如何将背景颜色(或自定义 css 类)应用于网格中的列 - ExtJs 4?

    看起来应该很简单 但我根本无法完成此任务 我什至不需要动态完成它 例如 假设我有一个简单的 2 列网格设置 如下所示 columns header USER dataIndex firstName width 70 cls red head
  • 解析器阻塞与渲染阻塞

    我一直在阅读有关优化网络性能的 Google 开发人员文档 我对那里使用的术语有点困惑 CSS 和 JavaScript 文件都会阻止 DOM 构建 但是 CSS 被称为渲染阻塞 而 JavaScript 被称为解析器阻塞 解析器阻塞 和
  • 仅部分页面滚动的 html 布局

    我想创建一个分为 3 部分的页面布局 一列具有固定宽度 其中包含两行具有固定高度 另一个具有固定宽度的列 可能包含多个项目 超出视图范围 我正在寻找一种方法 使页面滚动仅影响项目列 以便屏幕的左侧 第一列 保持在视图中 下面是布局的示例图像
  • bootstrap navbar-static-top 菜单分成两行

    我遇到了引导导航栏的问题 我使用 navbar static top 制作了菜单 起初一切都很好 当菜单被展开并添加了一些项目时 现在随着折叠之前的宽度 它扩展到两行 看起来很糟糕 在 CSS bootstrap 中进行了更深入的挖掘 但没
  • 如何为文本添加发光效果?

    我还没有真正找到任何好的简单的动画发光效果教程 如何为文本设置发光动画 如果您只想使用 CSS3 您甚至不必使用任何 jQuery JavaScript 只需在 CSS 中执行以下操作 confirm selection webkit tr
  • 水平对齐徽标和导航链接

    我一直在尝试将导航部分中的两个 div 以相同的方式对齐 我已经添加了左右浮动 但这不起作用 正如您在图像中看到的那样 它们之间始终存在 2 或 3 个像素间隙 http postimg org image lgtxebtpx http p
  • 将鼠标悬停在一个伪元素上时,使另一个伪元素出现吗?

    我试图生成一个屏幕 其中利用 before and after伪元素 但我想知道这样的功能是否真的可行 我有一个包装 div 它包裹在输入周围 允许pseudo element在此包装纸上 就像是 lt wrapper div lt inp
  • JavaScript 相当于 jQuery 的 keyup() 和 keydown()

    我在 stackoverflow 上看到过这个链接 document ready 相当于没有 jQuery https stackoverflow com questions 799981 document ready equivalent
  • 为什么在 CSS3 中启用硬件加速会降低性能?

    我在 css3 实验中将 10 000 个小 div 元素从浏览器视口的顶部移动到底部 对于此测试 我使用两种不同的方法 使用 GPU 加速translate3D x y z or translateZ 0 无需 GPU 加速 只需调整to
  • 2 个单词之间有空格 CSS

    我想在 css 中的 2 个单词之间添加一个空格 例如 1 RUNNING DAYS email protected cdn cgi l email protection 在 HTML 中有 nbsp nbsp但使用不正确 nbsp我认为
  • 如何将内容放在article.js之上/之上

    So I am trying to create a navigation and footer in the body of the website but the particle js keeps coming over those
  • Sass 与 BEM,继承选择器

    我正在使用 Sass 3 4 1 和 BEM 所以我的 scss 是 photo of the day title font size 16px 我希望每次将鼠标悬停在 photo of the day标题发生了一些事情 这很常见 所以通常
  • 如何在Shiny中默认选择verbatimTextOutput中的文本?

    这是与我之前的问题相关的问题 是否可以有固定宽度的 verbatimTextOutput 并让文本在 Shiny 中换行 https stackoverflow com q 58516071 7669809 我有以下闪亮的应用程序 http
  • 更改 mat-form-field 中的边框颜色

    我正在使用有角度的材料mat form field 我有深色背景 因此尝试将表单字段的边框更改为白色 但我无法使用 css 来实现它 不 无论我在 css 中进行什么更改 它们都不会反映到mat form field 这是我的代码的链接 S
  • 导航栏是垂直的而不是水平的

    div div
  • 具有列顺序的响应式多列列表

    我正在尝试创建一个有序的多列列表 但正在努力解决 CSS 网格布局规则 期望的结果应该是响应式的 在小屏幕上有 2 个网格列 在较大的屏幕上最多有 4 个网格列 同时保持列顺序 而不是像这样排序 1 2 3 4 5 6 7 8 9 10 1
  • 下拉菜单将导航栏向下推。如何避免呢?

    我是引导程序和网络开发的新手 我想构建一个具有两个导航栏的网页 并且根据屏幕尺寸 仅显示一个导航栏 对于屏幕尺寸 gt 768px 一切工作正常 至少看起来 对于较低的分辨率 下拉菜单将导航栏向下推到内容上方 如何避免这种情况 任何形式的帮
  • 图像映射区域周围不需要的边框

    我正在使用带有圆形区域的图像贴图 问题是我在 IE7 中的区域周围出现了不需要的边框 此边框不会出现在 FF 和 Chrome 中 也不会出现在 IE8 IE9 中 我尝试向图像添加 border 0 锚点的 css 属性 即 a bord
  • 单击按钮滚动到特定 div

    我有一个具有固定菜单和内容框 div 的页面 单击菜单时 内容框滚动到特定 div 到目前为止 一切都很好 这是这里的示例 https jsfiddle net ezrinn 8cdjsmb9 11 https jsfiddle net e
  • 打开我网站上的链接不起作用

    在我的网站上 我有一个我正在尝试获取工作的链接 我有一个遵循正常格式的链接 即 href 以 www youtube com 作为目标链接 并在末尾添加 target blank 当我单击该链接时 托管我的网站的网站会显示一条错误消息 当我

随机推荐

  • adb no permissions问题

    Google一番 得知可以通过用root权限启动adb server来解决问题 但是每次用adb不会很麻烦嘛 后来发现在SDK的帮助文档里有关于这个问题的说明 If you re developing on Ubuntu Linux you
  • 理解 $nextTick 的作用

    有同学在看 Vue 官方文档时 对 API 文档中的 Vue nextTick 和 vm nextTick 的作用不太理解 其实如果看一下深入响应式原理 vue js中的有关内容 可能会有所理解 不过有些同学可能看到这个标题之后就选择跳过了
  • rsync同步脚本

    bin bash export LANG C date date Y m d H M red echo e 033 0 31m blue echo e 033 0 36m white echo e 033 37m rsync usr bin
  • 解决克隆虚拟机无法上网问题

    通过VMware克隆出来一台linux的虚拟机 但是发现没有办法上网 然后上网查 原来是在linux中有唯一标识网卡的UUID 我们是通过克隆过来的 那么他们的UUID MAC地址和IP地址都相同了 所以导致克隆出来的机子没有办法上网 下面
  • access对比数据_数据分析师有理由爱Sqlserver之四-七大数据库测评Sqlserver胜出

    虽说各家数据库产品大同小易 学会一家 其他家都可以很快上手 但和编程语言的选择一样 人的精力有限下 只能深入研究一家的产品 故在学习之前 认真去评估应该选择哪一家数据库学习 这样的时间也很值得 总比学到一半不断地更换不同产品所浪费的时间好得
  • 一类学习(OCSVM)

    20201102 0 引言 我记得我第一次接触一类学习的时候 是在一本讲解异常流量的书上 大概18年的时候 当时有一个需求 就是所处的场景下 只能拥有一类数据 而其他类的数据 要不获取不到 要不获取了也不具备什么代表性 总体上就是这么一个场
  • VTK和Cmake的安装并运行一个vtk的案例

    VTK的安装并运行一个项目 1 CMAKE安装 要安装VTK的话首先需要安装CMAKE CMAKE的官网 https cmake org download 进入Cmake下载网页 可以看到很多版本 我们选择最新的 在文件列表中 我们选择最便
  • Java之类与对象

    作者简介 zoro 1 目前大一 正在学习Java 数据结构等 作者主页 zoro 1的主页 欢迎大家点赞 收藏 加关注哦 目录 初始面向对象 什么是面向对象 面向对象和面向过程区别 类的定义和使用 什么是类 类的定义 类的实例化 什么是类
  • 关于绘图的卡顿解决方案

    在Android应用中 cocos的渲染和js的逻辑是在gl线程中进行的 而android本身的UI更新是在app的UI线程进行的 所以如果我们在js中调用的Java方法有任何刷新UI的操作 都需要在UI线程进行 如果画板的控件继承于Vie
  • Redis6+PHP:实现根据经纬度计算出附近门店距离

    一 开始介绍 Redis GEO 1 Redis GEO 主要用于存储地理位置信息 并对存储的信息进行操作 该功能在 Redis 3 2 版本新增 Redis GEO 操作方法 geoadd 添加地理位置的坐标 geopos 获取地理位置的
  • CloudCompare——泊松重建

    目录 1 简介 2 利用输出密度 3 相关代码 博客长期更新 本文最近更新时间为 2023年8月10日 1 简介 算法原理见 泊松重建算法原理介绍 qPoissonRecon是 Poisson Surface Reconstruction
  • 单片机原理概念

    参考 单片机原理概念 作者 爱学习的小王呀 发布时间 2020 11 27 08 58 08 网址 https blog csdn net hongliwong article details 110219821 spm 1001 2014
  • SCL教程之如何使用SCL创建简单控制程序

    最近有不少朋友都对SCL编程感兴趣 网上的相关资料又较少今天我就为大家简单介绍一下如何使用SCL创建简单程序 1 首先我要先说明一下使用STEP7 或 PCS7都可以进行SCL编程 其编程方式与TIA的编程方式类似 但是语法稍有不同 今天我
  • vue+a-form 动态表格,动态增加动态删除

    思路借鉴了一位大佬的文章 原文地址如下 版权声明 本文为qq 42203909原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 antd实现动态增减表单项 支持赋初始值 首先是封装子组件 自己起个
  • ios 启动执行初始化

    UIViewController 分为下面三种情形创建 依次调用的方法 顺序如下 1 StoryBoard 1 initWithCoder 2 awakeFromNib 3 loadView 4 viewDidLoad 2 Xib 1 in
  • 模型保存的两种类型torch.save

    torch save model model face pt 一个常见的PyTorch函数是使用 pt文件扩展名来保存张量 model是我训练后的模型 后面的参数 model face pt 就是我模型保存的类名 存放同一文件夹下 当然可以
  • 数据库系统教程(第二版何玉洁)课后数据库上机实验答案

    附录C 上机实验 C 1 第4章上机实验 陈宇超 仅供参考 下列实验均使用SQL Server 的SSMS工具实现 1 用图形化方法创建符合如下条件的数据库 创建数据库的方法可参见本书附录A l 数据库名为 学生数据库 l 主要数据文件的逻
  • 常用的java虚拟机参数_Java虚拟机参数分析 - PerfMa

    参数查询 支持查询一到多个 JVM 参数 向用户展示每个 JVM 参数的详细信息 包括含义 用法等 并可查看社区对此参数的相关讨论 支持两种输入格式 直接输入一个或多个参数名 示例 Xms Xmx Xmn Xss MaxPermSize M
  • 超详细的OpenCV入门教程,12小时带你吃透OpenCV。

    OpenCV简介 OpenCV是一个基于Apache2 0许可 开源 发行的跨平台计算机视觉和机器学习软件库 可以运行在linux Windows Android和MAC OS操作系统上 1 它轻量级而且高效 由一系列 C 函数和少量 C
  • vue中scoped与/deep/深度选择器原理总结

    最近在写一个vue element ui项目 使用element ui某些组件修改样式时 老是需要加上 deep 深度选择器 以前只是知道这样用 但是还不清楚他的原理 这次就来好好的梳理一下 1 首先我们需要知道css中的属性选择器 w3c