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

news2024/9/22 11:43:27

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://www.coloradmin.cn/o/1964707.html

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

相关文章

解决 Python 中 AttributeError: module ‘typing‘ has no attribute ‘_ClassVar‘

启动 Flask 的时候遇到&#xff1a; AttributeError: module typing has no attribute _ClassVar 卸载 dataclasses pip uninstall dataclasses 启动 Flask 正常

jenkins pipeline 发布 jar并运行

废话不多说&#xff0c;上教程 一&#xff0c;配置publish ssh 二&#xff0c;配置 ssh server 记住Name 三 设置发布选项 1 设置模块多选&#xff08;请安装多选插件&#xff1a;Active Choices Plug-in&#xff09; ​ ​ 四 编写pipeline 说明&#xff1a; 1 module…

vue项目实战 vueCropper 仿微信头像任意区域截取图片,上传到腾讯云保存

在package.json中添加 "vue-cropperjs": "4", 后在控制台执行&#xff1a;npm install ImageCropper.vue <template><div v-if"src"><!-- Vue Cropper区域 --><el-row class"cropper-wrapper" v-if"src…

stm32_按键消抖_代码与流程分析

stm32按键消抖 一 问题背景二 解决思路三 代码实现 一 问题背景 开关按钮&#xff1a;按下信号为0&#xff0c;正常信号为1 在按下时&#xff0c;表面上看我们只按了一下&#xff0c;但信号的传递并不是单纯的由1直接变为0。这是由于机械触点断开/闭合时会有抖动&#xff0c;…

北京大学:利用好不确定性,8B小模型也能超越GPT-4

大模型有一个显著的特点&#xff0c;那就是不确定性——对于特定输入&#xff0c;相同的LLM在不同解码配置下可能生成显著不同的输出。 比如问一问chatgpt“今天开心吗&#xff1f;”&#xff0c;可以得到两种不同的回答。 常用的解码策略有两种&#xff0c;一个是贪婪解码&am…

好展位,抢先订!2025浙江(玉环)机械展

2025第18届浙江&#xff08;玉环&#xff09;机械工业展览会 时间地点&#xff1a;2025年4月25-28日 玉环会展中心 近年来&#xff0c;随着玉环工业经济的蓬勃发展&#xff0c;汽摩配件、阀门水暖五金产业、铜加工、眼镜配件、金属加工生产等行业&#xff0c;如同贪婪的巨人&…

React Native初次使用遇到的问题

Write By Monkeyfly 以下内容均为原创&#xff0c;如需转载请注明出处。 前提&#xff1a;距离上次写博文已经过去了5年之久&#xff0c;诸多原因导致的&#xff0c;写一篇优质博文确实费时费力&#xff0c;中间有其他更感兴趣的事要做&#xff08;打游戏、旅游、逛街、看电影…

4.2、存储管理-页式存储

页式存储和段氏存储会考 页式存储几乎必考&#xff0c;段氏存储可能会考 页式存储 页式存储是操作系统的一种存储管理方式。 因为我们的程序往往是远远大于内存的&#xff0c;所以程序在执行的时候&#xff0c;是不会一次性把所有内容都装入到内存中&#xff0c;它会把程序分…

实验3-3 比较大小 想知道①和②的区别是什么(都错)

//实验3-3 比较大小 代码① #include<stdio.h> #include<math.h>void swap(int a, int b);// 正确声明 swap 函数int main() {int a, b, c;scanf("%d %d %d",&a,&b,&c);// 比较并交换 a 和 bif (a > b) {swap(a, b);}// 比较并交换 b 和 …

力扣刷题之3111.覆盖所有点的最少矩形数目

题干描述 给你一个二维整数数组 point &#xff0c;其中 points[i] [xi, yi] 表示二维平面内的一个点。同时给你一个整数 w 。你需要用矩形 覆盖所有 点。 每个矩形的左下角在某个点 (x1, 0) 处&#xff0c;且右上角在某个点 (x2, y2) 处&#xff0c;其中 x1 < x2 且 y2 …

关于vue开发中,高德地图有时不显示的问题

场景1&#xff1a;在弹出框中初始化地图 先设置 this.dialogVisible true; 然后再用nextTick初始化地图 this.$nextTick(() > { this.initAmap(); }); 场景2&#xff1a;点击tab页路由回退&#xff0c;导致高德地图不初始化的问题 解决方法&#xff1a; 通过$refs的方…

焦化行业超低排放改造巩固提升方案(朗观视觉)

朗观视觉小编观察发现&#xff1a;随着全球对环境保护意识的日益增强&#xff0c;焦化行业作为高污染、高排放的工业领域&#xff0c;其超低排放改造已成为行业转型升级的必然趋势。为了积极响应国家关于推进生态文明建设、打赢蓝天保卫战的号召&#xff0c;山东省生态环境厅发…

Windows + Ubuntu双系统!小白轻松安装

前言 这几天有小伙伴想着装WindowsUbuntu双系统&#xff0c;但苦于找不到办法&#xff0c;就在某篇文章后台留言&#xff1a; 这不&#xff0c;今天就更新了嘛&#xff01;虽然做不到有求必应&#xff0c;但教程帖还是可以写写的&#xff0c;能帮一个是一个&#xff01; 今天要…

深入探讨RCE漏洞及其防御策略

1. RCE漏洞 1.1. 漏洞原理 远程代码执行&#xff08;RCE&#xff09;漏洞允许攻击者远程注入并执行操作系统命令或代码&#xff0c;从而控制后台系统。 1.2. 漏洞产生条件 调用第三方组件存在代码执行漏洞。用户输入内容作为系统命令参数拼接到命令中。对用户输入的过滤不严…

关于Linux服务器端更新命令apt update没有效果问题总结(校园网认证)

这里写目录标题 项目场景&#xff1a;问题描述错误解决过程个人解决apt update和apt upgrade 项目场景&#xff1a; 在使用Django进行服务器部署的时候&#xff0c;需要使用执行命令 apt update&#xff1a; 具体场景&#xff1a; 问题描述 需要使用apt命令进行升级、下载…

[HITCON 2017]SSRFme 1

目录 代码审计 符号shell_exec() 函数:GET " . escapeshellarg($_GET["url"])&#xff1a;pathinfo($_GET["filename"]basename() 题目解析 代码审计 118.182.186.90 <?phpif (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$http_x_headers explod…

二叉树,二叉查找树,平衡二叉树

一.绪论: 二.数据结构(二叉树): 1.简介: 1)每一个节点&#xff08;也叫结点&#xff09;都是一个独立的对象-->当中不仅要存数据值&#xff0c;还要存父节点地址值&#xff0c;左子节点地址值&#xff0c;右子 节点地址值 2)没有父节点或者子节点的节点就记为null 2.遍历方…

【Bug记录】模板生成错误:不属于vector的成员

项目场景&#xff1a; 在调用自己写的一个简化版优先级队列时候报语法错误&#xff1a;模板生成错误 问题描述 模板生成错误&#xff0c;如下图 原因分析&#xff1a; 问题的分析&#xff1a;刚开始怀疑写模板写错了&#xff0c;之后看错误列表发现是top函数不属于vector。…

<数据集>棉花识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13765张 标注数量(xml文件个数)&#xff1a;13765 标注数量(txt文件个数)&#xff1a;13765 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Partially opened, Fully opened boll, Defected boll, Flower] 序…