vue的scoped探究

在写vue组件的时候,style可以添加scoped属性,这属性到底干了哪些事情,会有哪些作用和影响呢?

1. 在style标签上添加scoped属性,这张样式表被编译之后,其生成的样式class会添加一个hash值(实际上是一个属性选择器)

如:

.v-customer{

color:red;

}

编译后成为:

.v-customer[data-v-123456] {

color:red;

}

2. 同时,组件渲染出来的html标签,如果用过这张样式表里的class,则会添加一个相同hash值的原生data-*标签属性(attribute)

如:<span data-v-123456 class="v-customer">xxx</span>

 

当样式有多级嵌套,hash值只会加在最底层的class上

如:

.v-customer {

color:red;

._ccc {

color:red;

}

}

编译后:

.v-customer[data-v-123456] {

color:red;

}

.v-customer ._ccc[data-v-123456] {

color:red

}

 

3. 带hash值的样式只对有着相同的hash值的html标签生效

 

4.每个组件(类)都有唯一的hash值,一个组件的多个实例有着相同的hash值

 

5. 这种带hash值的样式,其优先级会比相同的、不带hash值的样式要高,其实是相当于增加了一层属性选择器的权重

css优先级关系:内联样式 > ID 选择器 > 类选择器>属性选择器 > 伪类选择器 > 标签选择器 >伪元素选择器

如:

<style scpoed>

.v-customer {

._ccc {

color:red;

}

}

</style>

 

<style >

.v-customer {

div {

._ccc {

color:red;

}

}

 

}

</style>

这样编译出来的样式为

.v-customer ._ccc[data-v-123456] {

color:red

}

.v-customer div ._ccc{

color:red

}

从权重可以看出属性选择器的权重高于标签选择器,因此,上面的样式的优先级会更高

 

又如:

<style scpoed>

.v-customer {

._ccc {

color:red;

}

}

</style>

 

<style >

.v-customer {

.cus {

._ccc {

color:red;

}

}

 

}

</style>

从权重可以看出类选择器的权重高于属性选择器,因此,下面的样式的优先级会更高

 

总结

1 . scoped的组件样式并不是不可覆盖的,只要外面的样式优先级足够,还是可以覆盖的

2. scoped的样式只对当前组件生效,因此不会污染其他组件和子组件

3.scoped 的style里的样式如果想让他成为不带hash的样式以便子组件使用,可以使用 /deep/,这会使编译产生的class不带hash

如 :

<style scpoed>

.v-customer {

/deep/ ._ccc {

color:red;

}

}

</style>

编译之后为:

.v-customer ._ccc {

color:red;

}

被/deep/ 修饰过的class及其子class都不会被加上hash

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值