最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

如何修改Vue.js中scoped模式下的子组件内部标签样式

来源:动视网 责编:小采 时间:2020-11-27 19:56:50
文档

如何修改Vue.js中scoped模式下的子组件内部标签样式

如何修改Vue.js中scoped模式下的子组件内部标签样式:本篇文章给大家分享的是如何修改Vue.js中scoped模式下的子组件内部标签样式 ,内容挺不错的,希望可以帮助到有需要的朋友在Vue.js项目中,我们通常会在<style>标签上加上scoped属性,来为我们的组件生成一个唯一属性,如下面的代码:my-comp.v
推荐度:
导读如何修改Vue.js中scoped模式下的子组件内部标签样式:本篇文章给大家分享的是如何修改Vue.js中scoped模式下的子组件内部标签样式 ,内容挺不错的,希望可以帮助到有需要的朋友在Vue.js项目中,我们通常会在<style>标签上加上scoped属性,来为我们的组件生成一个唯一属性,如下面的代码:my-comp.v
 本篇文章给大家分享的是如何修改Vue.js中scoped模式下的子组件内部标签样式 ,内容挺不错的,希望可以帮助到有需要的朋友

在Vue.js项目中,我们通常会在<style>标签上加上scoped属性,来为我们的组件生成一个唯一属性,如下面的代码:

my-comp.vue

<template>
 <p class="my-comp">
 <span>my comp</span>
 </p>
</template>

<script>
 export default {
 }
</script>

<style scoped>
</style>

生成后的html如下,可以看到p以及所有子标签上都有一个data-v-0a679ea0标识属性,这个属性就是我们在<style>上加上scoped的结果,如果你不加scoped,是不会生成这个标识属性的。

这个标识属性给我们带来一个好处是,组件内的样式不会影响到其他组件的标签,试想一下,如果我在my-comp组件中写了如下样式:

<style>
 span {
 color: red;
 }
</style>

这个样式是一个非常通用的样式,如果其他组件中也有span标签,那就会应用到这个标签上了,加了scoped之后,最终生成的样式是这样的:

<style scoped>
 span { color: red; }
</style>
//生成后如下
<style>
 span[data-v-0a679ea0] {
 color: red;
 }
</style>

span[data-v-0a679ea0]这个样式只会应用到自己组件的span上,因为标识属性是组件唯一的。

如果我们把组件A放到组件B里面,看看这个标识属性是如何生成的。

home.vue

<template>
 <p class="home">
 <my-compo></my-compo>
 </p>
</template>

<script>
 import MyCompo from './my-comp'
 export default {
 components: {MyCompo}
 }
</script>

<style scoped>
</style>

生成的html代码如下:


data-v-957c7522是home组件的标识属性,这个属性也被添加到了my-comp组件的根上,但注意my-comp的span标签没有添加data-v-957c7522标识属性,因为这个span是my-comp组件内部的标签,并没有显示的在home组件中编写。

但有时候会出现需要在home组件写样式来修改my-comp内的标签这样的情况。

看下面代码:

这段代码是属于home组件的

<style scoped>
 .my-comp span {
 color: blue;
 }
</style>

但这段代码是不会改变<span>my comp</span>的颜色的,因为这段样式最终生成的样子是这样的:


my-comp的span标签并没有data-v-957c9522这个标识属性。

如何解决这个问题?

我们可以把home组件的scoped去掉就解决了,但这是不推荐的做法,上面已经说了,没有scoped的样式很容易影响其他组件,这种错误是非常难排查的。

如果你使用less这种样式语言,那么有个非常好的解决方案,看下面代码:

<style lang="less" scoped>
 @deep: ~'>>>';
 .my-comp @{deep} span {
 color: blue;
 }
</style>

我们再看最后生成的样式是怎么样的。


标识属性从span移到了.my-comp上了,这样这段样式就很好的应用到了my-comp组件的内部span标签,并且不会影响到其他组件。

文档

如何修改Vue.js中scoped模式下的子组件内部标签样式

如何修改Vue.js中scoped模式下的子组件内部标签样式:本篇文章给大家分享的是如何修改Vue.js中scoped模式下的子组件内部标签样式 ,内容挺不错的,希望可以帮助到有需要的朋友在Vue.js项目中,我们通常会在<style>标签上加上scoped属性,来为我们的组件生成一个唯一属性,如下面的代码:my-comp.v
推荐度:
标签: 标签 修改 VUE
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top