VUE3 :deep() 无效

本文介绍了在升级Vite4.2.1及以上版本时,如何处理因父标签缺失导致的样式穿透问题。升级至新版本后,官方支持不带父级标签的样式生效,同时解释了在Vue3中,由于template结构变化,scoped样式穿透失效的原因。
摘要由CSDN通过智能技术生成
  1. 解决方案 (任选其一)
    1.1 升级vite版本到4.2.1以上(推荐)
    1.2 添加父标签,使用以下写法(官网示例)

     ```
      <style scoped>
     	.a :deep(.b) {
     	  /* ... */
     	}
     </style>
     ```
     上面的代码会被编译成:
     ```
     .a[data-v-f3f3eg9] .b {
     	  /* ... */
     	}
     ```
    
  2. 场景复现(无父标签)

    使用:deep() 添加样式无效

    <template>
      <a-comp class="pdf-preview"> </a-comp>
    <template>
    <style lang="scss" scoped>
    .pdf-preview {
      :deep(.xx) {
          padding: 0;
      }
     }
    </style>
    
  3. 问题原因

    针对1.1

    vite 4.2.1 以上 新版本官方支持不带父级标签也可以生效

    针对1.2

    原因:使用scoped的时候,在 html 的标签中会生成data-v-xxx的一个属性,样式穿透就是利用的这个属性生成的css;

    而在 vue3 中,我们可以在template下不使用一个标签来包裹全部内容,而此时el-dialog在第一层的情况下就没有对应的data-v-xxx父级元素标签,所以样式穿透也就无效了.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,使用`::v-deep`是一种深度选择器,可以用于修改组件内部的样式。然而,有时候`::v-deep`可能不起作用的原因是因为你的Vue组件版本太低。通常情况下,需要使用Vue Loader和Vue Style Loader的较新版本来支持`::v-deep`选择器。 要正确使用`::v-deep`,需要将其放在想要修改的样式前面,并使用`v-deep`修饰符。例如: ```css ::v-deep .v-text-field.v-text-field--enclosed .v-text-field__details { margin-bottom: 8px; padding: 0px !important; } ``` 如果你的Vue组件版本较低,可以尝试升级Vue Loader和Vue Style Loader到较新的版本。然而,注意不要随意更改这两个组件的版本,因为它们是相互配套的。最终,你可以根据你的项目需求和版本兼容性来选择合适的版本。 此外,还有另一种深度选择器的写法是使用`/deep/`。例如: ```css .upload-demo { /deep/ .el-upload-list__item { transition: none; } } ``` 在这个例子中,`.upload-demo`是包裹着`.el-upload-list__item`的外层元素,通过深度选择器`/deep/`选中了`.el-upload-list__item`并修改了它的样式。 总结来说,如果`::v-deep`不生效,首先要确保你的Vue组件版本较新,并且正确使用了`::v-deep`或`/deep/`的语法。如果问题仍然存在,可以尝试升级Vue Loader和Vue Style Loader的版本,或者进一步研究其他解决方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [uniapp vue ::v-deep失效](https://blog.csdn.net/Amnesiac666/article/details/124667273)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue深度选择器/deep/无效的解决办法](https://blog.csdn.net/weixin_38958597/article/details/117063018)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值