如何将样式传递给子组件并将其用作 Vue 中的作用域样式?

San*_*jay 18 javascript css vue.js vue-component

我有一个父组件:

<template>
    <ChildComponent :styles="styles" />
</template>

<script>
export default {
    data: () => ({
        styles: `
            p {
                color: red
            }
        `
    })
}
</script>
Run Code Online (Sandbox Code Playgroud)

这是子组件:

<template>
    <p>Hello World</p>
</template>

<script>
export default {
    props: {
        styles: {
            type: String,
            required: true
        }
    }
}
</script>

<style scoped>

</style>
Run Code Online (Sandbox Code Playgroud)

现在我想使用子组件中父组件提供的那些样式作为作用域样式。例如:

<!-- ChildComponent.vue -->

<style scoped>
p {
    color: red
}
</style>
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

dre*_*ens 22

如果要使用范围样式定位子元素,则必须使用深度选择器。

可以用

a >>> b { color : red; }
/deep/ a b { color : red; }
a::v-deep b { color : red; }
Run Code Online (Sandbox Code Playgroud)

这是完整的解释:https : //vue-loader.vuejs.org/guide/scoped-css.html#child-component-root-elements

  • `/deep/` 也有效 https://bambielli.com/til/2018-08-19-how-to-target-child-components-with-scoped-css-in-vue/ (3认同)