具有多根节点的子组件不能从父范围样式设置样式
Child component with muti-root nodes cannot be styled from parent scoped style
我需要在 Vue 3 + Vite 中从另一个正在使用它的组件来设置整个组件的样式。我正在尝试为组件标签设置 class,但它不起作用。
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
<HelloWorld class="hello"/>
</template>
<style scoped>
.hello {
display: none;
}
<style>
HelloWorld.vue
<template>
<header></header>
<main v-bind="$attrs"></main>
<template>
vueJS中有两种样式:
- 全局样式
- 组件基础样式
在全局样式中,你只需要一个css文件,里面写了所有css,另一方面,如果你想要一个样式,你有组件基础样式parent 或您需要的 child。
/深
使用它,您可以轻松定位 child 个元素:
<style>
/deep/{
.childElement{
display:none;
}
}
<style>
我认为这可能对您有所帮助。 :)
如果 HelloWorld.vue
组件有一个根元素,例如:
<template>
<div class="hello-world">
/* ... */
</div>
</template>
您的代码无需更改任何内容即可运行,因为 class hello
将添加到 hello-world
。阅读文档 -> Fallthrough Attributes
如果 HelloWorld.vue
组件有多个根节点,例如:
<header>...</header>
<main>...</main>
<footer>...</footer>
那么不会发生“自动属性失效行为”,您必须手动绑定 $attrs
,否则您会收到警告:
<header>...</header>
<main v-bind="$attrs">...</main>
<footer>...</footer>
阅读文档 -> Attribute Inheritance on Multiple Root Nodes
mutli-root 个组件有什么问题?
一旦你向一个组件添加了很多根节点,那么突然之间父元素就不能改变 style scoped
中的子元素样式了。
我不知道这是预期的行为还是一个错误,但如果您需要更新,see this issue
有没有办法为子 mutli-root-nodes 组件的元素设置样式?
一种方法是使用 non-scoped style
:
<style>
.hello {...}
</style>
另一种方法是使用 style module
:
<template>
<HelloWorld :class="$style.hello" />
</template>
<style module>
.hello {
background: blue;
color: white;
}
</style>
我需要在 Vue 3 + Vite 中从另一个正在使用它的组件来设置整个组件的样式。我正在尝试为组件标签设置 class,但它不起作用。
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
<HelloWorld class="hello"/>
</template>
<style scoped>
.hello {
display: none;
}
<style>
HelloWorld.vue
<template>
<header></header>
<main v-bind="$attrs"></main>
<template>
vueJS中有两种样式:
- 全局样式
- 组件基础样式
在全局样式中,你只需要一个css文件,里面写了所有css,另一方面,如果你想要一个样式,你有组件基础样式parent 或您需要的 child。
/深
使用它,您可以轻松定位 child 个元素:
<style>
/deep/{
.childElement{
display:none;
}
}
<style>
我认为这可能对您有所帮助。 :)
如果 HelloWorld.vue
组件有一个根元素,例如:
<template>
<div class="hello-world">
/* ... */
</div>
</template>
您的代码无需更改任何内容即可运行,因为 class hello
将添加到 hello-world
。阅读文档 -> Fallthrough Attributes
如果 HelloWorld.vue
组件有多个根节点,例如:
<header>...</header>
<main>...</main>
<footer>...</footer>
那么不会发生“自动属性失效行为”,您必须手动绑定 $attrs
,否则您会收到警告:
<header>...</header>
<main v-bind="$attrs">...</main>
<footer>...</footer>
阅读文档 -> Attribute Inheritance on Multiple Root Nodes
mutli-root 个组件有什么问题?
一旦你向一个组件添加了很多根节点,那么突然之间父元素就不能改变 style scoped
中的子元素样式了。
我不知道这是预期的行为还是一个错误,但如果您需要更新,see this issue
有没有办法为子 mutli-root-nodes 组件的元素设置样式?
一种方法是使用 non-scoped style
:
<style>
.hello {...}
</style>
另一种方法是使用 style module
:
<template>
<HelloWorld :class="$style.hello" />
</template>
<style module>
.hello {
background: blue;
color: white;
}
</style>