vue-css【scoped css】和 【css module】

本文介绍了Vue中解决样式全局化的方法,如CSS Modules和scoped CSS,以及如何通过PostCSS转换 scoped 属性。讨论了在组件中同时使用全局和局部样式,并解释了如何使用深度作用选择器(>>>或::v-deep)来影响子组件样式。文章还提到了使用scoped CSS可能带来的性能影响,并建议使用class或id替代以提高效率。
摘要由CSDN通过智能技术生成

<style> 标签可以有 scoped 或者 module 属性

对于样式全局化问题,解决方案可以有:CSS Modules、 scoped css、CSS预处理器(Sass/Less等)

CSS Modules:https://blog.csdn.net/weixin_44869002/article/details/105806021

  • 当 <style> 标签有 scoped 属性时,它通过使用 PostCSS 来实现以下转换:
<style scoped>
.example {
  color: red;
}
</style>

<template>
  <div class="example">hi</div>
</template>

转换为:

<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>

<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>

 

  • 一个组件中同时使用有 scoped 和非 scoped 样式
<style>
/* 全局样式 */
</style>

<style scoped>
/* 本地样式 */
</style>
  • 使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的 scoped CSS 和子组件的 scoped CSS 的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式。
  • 深度作用选择器:>>>
  • 有些像 Sass 之类的预处理器无法正确解析 >>>。这种情况下你可以使用 /deep/ 或 ::v-deep 操作符取而代之——两者都是 >>> 的别名,同样可以正常工作。
  • 通过 v-html 创建的 DOM 内容不受 scoped 样式影响,但是你仍然可以通过深度作用选择器来为他们设置样式
<style scoped>
.a >>> .b { /* ... */ }
</style>

会编译成

.a[data-v-f3f3eg9] .b { /* ... */ }

性能:

当 p { color: red } 是 scoped 时 (即与特性选择器组合使用时) 会慢很多倍。如果你使用 class 或者 id 取而代之,比如 .example { color: red },性能影响就会消除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值