Vue及Vue3、小程序样式穿透问题解决方案

本文主要讲一讲Vue样式穿透的问题,我们经常使用各种样式预处理器,以及样式隔离,这就导致我们在改变第三方组件样式的时候经常不生效

css样式

css是层叠样式表可以修饰我们的网页

css 后面的样式可以覆盖前面的样式

css 是有优先级权重的,权重不够无法覆盖,权重可累加!

/*
* 最高级权重 !important 无穷大
* 内联样式 权值为1000 如 style=""
* ID选择器 权值为100  如 #id 
* 类,伪类和属性选择器 权值为10 如.box :hover :first-child等
* 标签选择器和伪元素选择器 权重为1 如 div :before等
*/

运用上面可以解决一部分的样式问题

scoped

我们经常写Vue文件的时候会在 style 标签上写上 scoped 属性,那么该样式就 只作用于当前文件,因为它在编译的时候会加上唯一hash前缀!

所以会经常导致我们的样式穿透不生效!

无预处理器

我们什么预处理器都不使用的话,只需要加上>>>即可

/* .box 是当前文件我们自己命名的class */

.box >>> .item{
  color:red;
}

less预处理器

我们使用less预处理器,只需要加上/deep/即可

/* .box 是当前文件我们自己命名的class */
.box {
  /deep/ .item{
    color:red;
  }
}

scss预处理器

我们使用scss预处理器,只需要加上::v-deep即可

/* .box 是当前文件我们自己命名的class */
/* ::v-deep 也可写成 :v-deep */
.box {
  ::v-deep .item{
    color:red;
  }
}

微信小程序

微信小程序的组件中,我们会发现上面的都会失效,我们要加上以下内容

<!-- 该写法为uniapp vue2 模式下 -->
<script>
  export default {
    options: {
      styleIsolation'shared'
    }
  }
</script>
Vue及Vue3、小程序样式穿透问题解决方案
官方说明

最新vue3 + vite模式下

新版的vue3 + vite 已经不建议以上的写法了,会给警告

the >>> and /deep/ combinators have been deprecated. Use :deep() instead.

我们看到第三方UI库已经大面积使用伪类函数了,样式穿透官方也建议使用:deep()代替

:deep(.box .item){
  color:red;
}
Vue及Vue3、小程序样式穿透问题解决方案
第三方样式

如果感觉有帮助,麻烦3连(关注、赞、在看),谢谢! 后面会更新更多。


原文始发于微信公众号(分享是个有趣的东西):Vue及Vue3、小程序样式穿透问题解决方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/158718.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!