Skip to content

scoped样式

通过给style标签添加scoped属性,可以做到样式隔断,避免样式污染

html
<template>
    <div class="box"></div>
    <span class="son"></div>
</template>

<style scoped>
    .box{
        width: 200px;
        height: 200px;
    }

    .son{
        color:#fff
    }
</style>

其原理是:

1.给style标签添加scoped属性后,会给当前组件每一个dom都添加一个格式为data-v-xxxx的属性,其中xxxx是一个唯一的字符串,并且在当前组件中每一个dom上都是相同的

2.然后编译之后的css会添加上属性选择器.box [data-v-xxx]{}

这样每个组件中的css都是在一个作用域,不会影响到其他组件中的元素

编译后dom以及css会像如下所示

html
<template>
    <div class="box"  data-v-7ba5bd90></div>
    <span class="son"  data-v-7ba5bd90></div>
</template>

<style scoped>
    .box [data-v-7ba5bd90]{
        width: 200px;
        height: 200px;
    }

    .son [data-v-7ba5bd90]{
        color:#fff
    }
</style>

MIT Licensed