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

1、scoped

  • scoped属性用于限制样式仅应用于当前组件。
  • 当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,通过该属性,可以使得组件之间的样式不互相污染。

原理:当样式中加了scoped属性时候,编译的时候会自动给每一个dom节点都添加一个不重复的自定义属性,例如:data-v-4cd6f8b2(在同一个组件中,添加在所有节点上这个属性是一样的)

style标签拥有scoped属性编译后

通过代码可以看到加了scoped之后btnbg后面多了一个属性[data-v-4cd6f8b2]

2、样式穿透

  • 下面三种样式穿透的方法均不是标准css的一部分,而是vue的特殊语法
  • >>>、/deep/与::v-deep在实现效果上来说是一样的。它们都是Vue中用于穿透组件scoped样式隔离的语法,允许组件内的样式影响到子组件或更深层次的DOM元素

(1)>>>(适用于css原生样式)

如果项目使用的是css原生样式而没有用 scss 、sass、less ,那么可以直接使用 >>> 穿透修改

(2)/deep/ 与 ::v-deep 

项目中如果用到了预处理器 scss 、sass、less 操作符 ,那么用>>> 可能会因为无法编译而报错 ,比如在 <style lang="scss" scoped>,可以使用 /deep/或者::v-deep穿透

  • 在Vue 2.x项目中,/deep/和>>>被广泛使用来实现样式的穿透。
  • 在Vue 3.x项目中,推荐使用::v-deep来实现样式的穿透,因为它提供了更好的语义清晰度和兼容性

3、代码演示样式穿透

(1)暂且叫下面的组件为a组件,a组件中有一个testView组件

<template><div class="test_bg"><testView></testView></div>
</template><style lang="scss" scoped>.test_bg{padding: 50px;background-color: #FAB32D;.test_app{background-color: rebeccapurple;width: 100%;height: 200px;.test_app_c{background-color: red;width: 100%;height: 100px;.test_app_c_a{background-color: green;width: 100%;height: 20px;}}}
}
</style>

(2)下面是testView组件,下面我们叫做b组件吧

<template><div class="test_app"><div class="test_app_c"><div class="test_app_c_a"></div></div></div>
</template><script setup>
</script><style lang="scss" scoped>
.test_app {background-color: rebeccapurple;width: 50%;height: 200px;.test_app_c {background-color: red;width: 50%;height: 100px;.test_app_c_a {background-color: green;width: 50%;height: 20px;}}
}
</style>

上面代码style中用了scoped属性,父子组件相互隔离,样式彼此不受影响,运行代码如下图

其中外面黄色部分是a组件中的标签,紫色是b中的标签,按理说两个组件相互隔离,那么紫色部分应该渲染的是b组件里的样式,withd:50%,但是我们发现他其实是渲染a组件中的width:100%,后面子元素的样式才是渲染的b组件的样式,这里要注意,查看编译后的样式就能明白,a组件中添加了data-v-4cd6f8b2属性,b组件中隔离后往元素添加了data-v-5dd7fed2属性,test_app这个div同时添加了a和b组件的属性,样式被a组件的样式覆盖了

重点来了,这个时候如果我们想要样式穿透,在a组件中修改b组件中子元素的样式,那我们可以用/deep/ 或者 ::v-deep 来去掉每个元素中添加的属性,修改a组件中的样式代码后如下

.test_bg{padding: 50px;background-color: #FAB32D;::v-deep .test_app{background-color: rebeccapurple;width: 100%;height: 200px;.test_app_c{background-color: red;width: 100%;height: 100px;.test_app_c_a{background-color: green;width: 100%;height: 20px;}}}
}

我们只是在.test_app前面加上了::v-deep,这个时候test_app后面所有的子元素就穿透了scoped的约束,实际上加上了::v-deep就是去掉约束data-v-4cd6f8b2以及data-v-5dd7fed2

下面对比看一下没加::v-deep与加上的区别

没加

加上后

从图可以看出,添加了::v-deep后test_app_c_a后面就去掉了[data-v-5dd7fed2],代码运行结果如下

大家可以通过代码以及运行效果图来对比,然后完全掌握约束的原理以及样式穿透的原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269515.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

QT自定义无边框窗口(可移动控制和窗口大小调整)

QT是一个功能强大的跨平台开发框架&#xff0c;它提供了丰富的界面设计工具和组件。在界面开发中&#xff0c;QT窗口自带的标题栏无法满足我们的需求。我们就需要自定义无边框窗口&#xff0c;包括自定义标题栏和窗口大小调整功能。本文将介绍如何在QT中实现这些功能。 一、简…

【五】MySql8基于m2芯片arm架构Ubuntu24虚拟机安装

文章目录 1. 更新系统包列表2. 安装 MySQL APT Repository3. 更新系统包列表4. 安装 MySQL Server5. 运行安全安装脚本6. 验证 MySQL 安装7. 配置远程连接7.1 首先要确认 MySQL 配置允许远程连接&#xff1a;7.2 重启 MySQL 服务&#xff1a;7.3 检查 MySQL 用户权限&#xff1…

**往届快至会后2个月完成检索,刊后1个月完成检索,第四届电子信息工程与计算机科学国际会议(EIECS 2024)火热征稿中!

2024年第四届电子信息工程与计算机科学国际会议(EIECS 2024) 2024 4th International Conference on Electronic Information Engineering and Computer Science 中国延吉 | 2024年9月27-29日 二轮截稿日期&#xff1a;2024年8月9日 收录检索&#xff1a;EI Compendex, Sc…

qt初入门9:qt记录日志的方式,日志库了解练习(qInstallMessageHandler,qslog, log4qt)

项目中用到qt&#xff0c;考虑有需要用到去记录日志&#xff0c;结合网络&#xff0c;整理一下&#xff0c;做记录。 简单了解后&#xff0c;qt实现日志模块思考&#xff1a; 1&#xff1a;借助qt自带的qInstallMessageHandler重定向到需要的目的地。 2&#xff1a;自己封装一…

pageoffice常见问题处理

pageoffice是由卓正软件公司开发的一套在线编辑office的插件。要在自己的系统中使用&#xff0c;需要进行集成开发&#xff0c;把pageoffice嵌入到自己的系统中。以下记录在使用过程中常见的问题和解决方法&#xff1a; 1.PageOffice对客户端的要求 office 不能是家庭版&#x…

2. 卷积神经网络无法绕开的神——LeNet

卷积神经网络无法绕开的大神——LeNet 1. 基本架构2. LeNet 53. LeNet 5 代码 1. 基本架构 特征抽取模块可学习的分类器模块 2. LeNet 5 LeNet 5: 5 表示的是5个核心层&#xff0c;2个卷积层&#xff0c;3个全连接层.核心权重层&#xff1a;卷积层、全连接层、循环层&#xff…

093、Python操作Excel生成统计图表

在Excel里做统计表是我们经常会做的一件事情。我们也可以通过编程的方式操作Excel生成统计图表。 下面是官方的一个很有参考价值的案例&#xff1a; from openpyxl import Workbook from openpyxl.chart import BarChart, Reference from copy import deepcopywb Workbook(w…

生活实用英语口语“拆迁”用英文怎么说?柯桥成人学英语到蓝天广场

● 1. “拆迁”英语怎么说&#xff1f; ● 01. 其实国外也有拆迁 但国外的拆迁&#xff0c;只管拆 不管安置&#xff0c;你爱去哪去哪 英文可以说 housing removal 02. 但我们中国的“拆迁” 既管“拆”也管“迁” &#xff08;还是中国人幸福~&#xff09; 英文可以说 housin…

车载录像机给公交公司管理带来哪些好处

一、引言 随着社会的快速发展&#xff0c;公共交通日益成为人们出行的主要方式之一。对于公交公司而言&#xff0c;如何有效管理车辆及司乘人员&#xff0c;确保行车安全、服务质量以及乘客的合法权益&#xff0c;成为一项重要的任务。本文将从以下几个方面详细阐述管理效果的…

排查C++软件异常的常见思路与方法(实战经验总结)

目录 1、概述 2、常用的C++异常排查思路与方法 2.1、IDE调试 2.1.1、Debug和Release下的调试 2.1.2、VS附加到进程调试 2.1.3、Windbg附加到进程调试 2.2、添加日志打印 2.3、分块注释代码 2.4、数据断点 2.5、历史版本比对法 2.6、Windbg静态分析与动态调试 2.6.1…

7.24 补题

C 小w和大W的决斗 链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 小w和大W为了比出谁更聪明。决定进行一场游戏。游戏内容如下: 两人轮流操作&#xff0c;小w先进行操作&#xff0c;每次操作可以选择下列两个其一: 选择数组中的一…

websocket通信问题排查思路

websocket通信问题排查思路 一、websocket连接成功&#xff0c;但数据完全推不过来。 通过抓包发现&#xff0c;是回包时间太长超过了1分钟导致的。这种通常是推送数据的线程有问题导致的。 正常抓包的情况如下&#xff1a; 二、大量数据可以正常推送成功&#xff0c;不定时…

【机器学习】机器学习之多变量线性回归-Multiple_Variable_Soln

引言 扩展数据结构和之前开发的例程&#xff0c;以支持多个特征。有几个例程被更新&#xff0c;使得实验看起来有些冗长&#xff0c;但实际上只是对之前的例程进行了小的调整&#xff0c;因此快速回顾是可行的 文章目录 引言一、多变量线性回归1.1 目标1.2 工具 二、问题陈述2.…

【因数之和】python求解方法

输入两个整数A和B&#xff0c;求A的B次方的因子和&#xff0c;结果对1000000007取模。 def mod_exp(base, exp, mod):result 1while exp > 0:if exp % 2 1:result (result * base) % modbase (base * base) % modexp // 2return resultdef sum_of_factors(n):total 0…

【无标题】shell脚本的基本命令+编写shell脚本

shell脚本 一.shell基础 1.shell概念 2.shell脚本 3.shell脚本编写注意事项 二.编写shell脚本 1.编写一个helloworld脚本&#xff0c;运行脚本 [rootshell ~]# vim helloworld.sh #!/bin/bash //声明 echo "hello world!" ls -lh /etc/ 运行脚本(四种方式)&…

c/c++的内存管理(超详细)

一、c/c的内存分布 这是操作系统中对于内存的划分&#xff1a; 我们重点掌握以下几个区域即可&#xff1a; 1.栈 (调用函数会建立栈帧) 2.堆(动态开辟的空间) 3.数据段(静态区)&#xff1a;存放静态变量以及全局变量 4.代码段 (常量区) 先来看看一个题目&#xff1a; int…

[物联网专题] RS485继电器输出之Modbus控制流程和时间优化分析

在工控领域&#xff0c;往往需要大量的输入信号和输出控制信号&#xff0c;以接收各种传感信号和产生输出控制动作。由于PLC的输出触点数量有限&#xff0c;或者因为更多输出触点的PLC价格昂贵&#xff0c;性价比并不高。为了解决这个矛盾&#xff0c;基于MODBUS协议的继电器IO…

数据结构:基础概念

一、相关概念 概念 相互之间存在一种或多种特定关系的数据元素的集合。 逻辑结构 集合&#xff1a;所有数据在同一个集合中&#xff0c;关系平等。 线性&#xff1a;数据和数据之间是一对一的关系 树&#xff1a; 一对多 图&#xff1a;多对多 物理结构(在内存当中的存储关系)…

AC695x BLE OTA调试

SDK版本&#xff1a;AC695N_soundbox_sdk_release_3.1.0AC695x SDK支持BLE OTA升级&#xff0c;使用杰理公版APP升级即可。SDK需要做一些调整&#xff0c;板级文件需要增加如下配置&#xff0c;使能OTA升级 #define TCFG_APP_BT_EN 1#define APP_UPDATE_EN …

Three.js动效(第09辑):令人瞠目结舌的交互效果,沉浸式体验

three.js能够实现各种3D动态效果&#xff0c;不禁有小伙伴问了&#xff0c;实现这些效果到底有什么意思&#xff0c;其实最大的意义就是给用户沉浸式的体验&#xff0c;瞬间专注用户注意力。 Three.js能够带来以下沉浸式体验&#xff1a; 3D虚拟现实体验&#xff1a; 使用Th…