首页 > 其他分享 >>>>、/deep/、::v-deep、::v-deep()、:deep()区别及用法

>>>、/deep/、::v-deep、::v-deep()、:deep()区别及用法

时间:2024-11-24 20:00:06浏览次数:8  
标签:Vue 区别 样式 deep 用法 组件 选择器 CSS

现象:在Vue.js项目中,在使用组件化开发时,经常需要修改组件内部的样式,但Vue的样式封装特性(如<style scoped>)会阻止外部样式直接作用于组件内部。

引入穿透选择器: 在Vue.js 中, >>> 、 /deep/ 、 ::v-deep 、 ::v-deep()、:deep() 都是用于穿透组件样式封装的选择器。

作用:使父组件的样式能够影响到子组件的 DOM。深度选择器允许从父组件中穿透到子组件内部,可直接修改子组件的样式。能够跨越组件的封装边界,对内部元素进行样式定制。同时在需要定制第三方UI库组件样式时尤为有用。

1. >>> (深度选择器)

CSS原生中的深度选择器语法,用于穿透样式封装。
在Vue单文件组件中,通常会搭配CSS预处理器使用,需要配置支持。
Sass等预处理器无法正确解析>>>,因为Vue会将其视为普通CSS选择器的一部分。因此不推荐使用‌。

<template>  
  <div class="parent">  
    <ChildComponent />  
  </div>  
</template>

<style scoped>
.parent >>> .child {
   /* 样式 */ 
 }
</style>
2. /deep/

是Vue 2.x中用于穿透组件样式封装的一种方式,类似于Sass的/deep/或/deep/的别名::v-deep。
它支持CSS预处理器(如Sass、Less)和CSS原生样式。
在Vue 3.x中,虽然一些构建工具或库可能仍然兼容,/deep/不再被官方直接支持。

<style scoped>
/deep/ 类名 {
  /* 样式 */
}
</style>
 3. ::v-deep

用于替代原生CSS中的>>>和Vue 2.x中的/deep/。它支持CSS预处理器和CSS原生样式。

<style scoped>  
::v-deep 类名 {  
  /* 样式 */  
}  
</style>
 4.::v-deep()

是Vue 3 Composition API中的特殊用法。通过v-deep()函数在<style scoped>中使用,用于穿透组件样式封装‌。

<style scoped>  
::v-deep(类名) {  
  /* 样式 */  
}  
</style>
 5.:deep()

是Vue 3是官方推荐的深度选择器。通过 deep()函数在 <style scoped> 中使用,用于穿透组件样式封装‌。

<style scoped>  
:deep(类名) {  
  /* 样式 */  
}  
</style>
总结
 
  •  >>> 和 /deep/ 用于穿透样式封装,由于 >>> Sass等预处理器无法正确解析 >>>,需要配置支持、/deep/ 是一种较旧的语法,存在兼容性问题,推荐使用::v-deep。
  •  推荐使用:因为它们是更标准的 CSS 伪元素语法,且以避免可能的编译错误‌。
     - Vue2::::v-deep
     - Vue3: :deep()
  • >>> → /deep/ → ::v-deep → ::v-deep() → :deep()  // 关系选择器 → 伪元素 → 伪类

标签:Vue,区别,样式,deep,用法,组件,选择器,CSS
From: https://blog.csdn.net/Estrellayun_/article/details/144009930

相关文章

  • 进程与线程有什么区别?JS的单线程带来哪些好处?
    进程和线程的区别主要体现在以下几个方面:定义:进程:是一个独立的执行环境,拥有独立的内存空间、系统资源和执行流。可以把它理解为一个正在运行的程序或应用。线程:是进程内部的一个执行单元,共享进程的资源(例如内存空间),但拥有独立的执行栈和程序计数器。可以把它理解为进程......
  • 请描述一下cookies、sessionStorage和localStorage的区别?
    在前端开发中,cookies、sessionStorage和localStorage都是用于在浏览器中存储数据的机制,但它们之间存在显著的区别:1.数据的生命周期:Cookies:Cookie的生命周期可以通过expires或max-age属性设置。如果没有设置过期时间,Cookie会在浏览器会话结束时(关闭浏览器)被删除,这......
  • 行内元素和块级元素有什么区别,如何相互转换?
    在前端开发中,行内元素(inlineelements)和块级元素(blockelements)是两种基本的HTML元素类型,它们在页面布局中扮演着不同的角色,主要区别在于:1.排列方式:行内元素:水平排列,从左到右,直到一行排满才会换行。多个行内元素会在一行内显示,就像文字一样。块级元素:垂直排列,每个块级......
  • 说说你理解的同步和异步的区别是什么?
    在前端开发中,同步和异步操作是两种不同的代码执行方式,它们的核心区别在于是否阻塞主线程的执行。同步(Synchronous)定义:同步操作会按顺序逐行执行,每一行代码执行完毕后才会执行下一行。如果某一行代码需要耗费较长时间(例如网络请求),那么后续的代码都必须等待,直到前面的操作完......
  • springboot中@RequestParam和PathVariable区别
    @PathVariable用于将URL路径中的某个片段绑定到方法参数上。通常用于RESTful风格的URL中。上图中,根据id查询用户,请求参数为id,所以需要使用@PathVariable来映射字段而@RequestParam用来映射请求的url中没有写明的参数使用apifox调用该方法可以发现@DeleteMapping后......
  • 举例说明你对ol和ul标签的区别?它们的运用场景分别是什么呢?
    ol和ul标签都是用于创建列表的HTML标签,但它们代表不同类型的列表,因此应用场景也不同。1.ol(OrderedList-有序列表)含义:ol标签创建的是有序列表,列表中的每一项都有一个特定的顺序,通常用数字或字母表示。运用场景:当需要展现一系列有先后顺序、步骤性、排名性的......
  • 请描述下null和undefined的区别是什么?这两者分别运用在什么场景?
    在JavaScript中,null和undefined都表示值的缺失,但它们有细微的差别,并在不同的场景下使用。undefined含义:表示变量已声明但尚未赋值。也可以理解为变量的默认初始状态。JavaScript引擎会自动给未赋值的变量赋予undefined值。场景:访问未定义的变量:尝试访问一个不存......
  • 请描述下元素的href和src有什么区别?
    href和src都是HTML元素的属性,用于链接外部资源,但它们的功能和用途不同:href(HypertextReference)指向链接的目的地,告诉浏览器在哪里找到链接的目标。用于建立超链接,点击后浏览器会跳转到指定的URL。常用于<a>,<link>,<base>等标签。浏览器会并行加载href属性指......
  • Java-CountDownLatch的用法
    一、使用场景        CountDownLatch也属于JUC。线程可以使用await()进行等待,多线程进行递减计数,等到计数到0的时候等待即不再阻塞,从而向下执行。在日常开发中经常会遇到需要在主线程中开启多个线程去并行执行任务,并且主线程需要等待所有子线程执行完毕后再进行汇总......
  • mysql alter modify 和 change的区别
    在MySQL中,ALTERTABLE语句用于修改现有的表结构。MODIFY和CHANGE是ALTERTABLE语句中的两个常用选项,它们都用于修改列的定义,但有一些关键的区别。MODIFY用途:MODIFY主要用于修改现有列的定义,比如改变数据类型、默认值、是否允许NULL等。语法:ALTERTABLEtable_na......