我有以下表单组件:
<template>
<div>
<form>
<input placeholder="Recipe Name">
<textarea placeholder="Recipe Description..." rows="10"></textarea>
</form>
</div>
</template>
<script>
export default {
name: 'AddRecipeForm'
}
</script>
<style scoped>
form {
display: flex;
flex-direction: column;
}
</style>
<style>
使用scoped
属性。
应用后,CSS 不会加载。删除scoped
后, 会被应用。< / p>
但是我想将它保留在组件的本地。
为什么在scoped
属性存在时未应用CSS?
答案 0 :(得分:38)
由于某些原因,在第一次将重定义的样式添加到组件时,不会在热重装期间应用它们。整页重新加载解决了该问题,从那里开始,样式已经被检测到,因此可以通过连续的热重新加载进行更新。
答案 1 :(得分:16)
看起来这是通过完全重新加载页面来解决的。热重载应该照顾范围的CSS。
然而,对于未来的观看者,当范围CSS未应用于子组件时,通常会询问此问题。这可以通过使用deep selectors来解决。 (例如:使用G = AbelianGroup((4,4,5))
)
答案 2 :(得分:1)
与 OP 完全相同的症状,但到目前为止这里的建议都没有奏效,我需要继续前进,所以我们的解决方案是通常依赖 CSS 选择器:
在实时调试我们的 CSS 时有一个意想不到但受欢迎的好处是 CSS 规则的起源现在在 devtools 中很明显。
MyComponent.vue
<template>
<v-card class="MyComponent" ... >
<div class="fancyBox" ... >
/* ... */
</v-card>
</template>
<style>
.MyComponent .fancyBox { /* scoped to any MyComponent instance */ }
.globalBox { /* we wouldn't put a global style here, obv */ }
</style>
是的,以这种方式为组件范围的样式添加前缀很痛苦,但是,至少这是一件熟悉的事情,并且您在开发工具中获得了额外的好处,可以将样式的来源追溯到声明它的组件。
需要注意的是,当然,父作用域的 CSS 也会渗透到子作用域。这至少是熟悉的 CSS 行为。
答案 3 :(得分:0)
通过运行“纱线服务”来重建Vue应用已解决了我的问题。