Vue样式穿透

应用场景

Vue组件中写样式,通常如下方代码:

<style scoped>
  .page .data {
    color: red;
  }
</style>

因为关键字scoped的原因,style标签内的样式只会对当前组件内容生效,因为最终生成出来的样式选择器是这样的:

.page .data[data-v-98cf4d84] ,

所以这个data样式只会对含有 data-v-98cf4d84 属性的HTML元素生效。

但是如果这个data样式,是在某个第三方组件当中的,

这个组件的class就是data,

没有 data-v-98cf4d84 属性,

这时候我们这么写样式是无法生效的,所以就需要用到样式穿透,

[data-v-98cf4d84]选择器去除,同时只对当前组件生效, 避免影响其他组件。

样式穿透

1. css 使用 >>>

<style lang="css" scoped>
  .page >>> .data {
    color: red;
  }
</style>

2. scss 使用 /deep/ 或者 ::v-deep

<style lang="scss" scoped>
  .page {
    /deep/  .data {
    	color: red;
  	}
  }
</style>

/deep/在某些情况下无法生效,可以切换为::v-deep

<style lang="scss" scoped>
  .page {
    ::v-deep .data {
    	color: red;
  	}
  }
</style>

使用样式穿透以后,生成出来的css样式如下:

.page[data-v-98cf4d84] .data,

编译器将[data-v-98cf4d84]放到了上一个标签选择器上面,

由此data样式只会对.page[data-v-98cf4d84]下的HTML元素生效,

即完成了对classdata的HTML元素设置样式,又保证了不影响范围之外的data元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值