【发布时间】:2018-03-23 21:34:29
【问题描述】:
考虑一个具有作用域样式的Child 组件,它在内部使用foo 类名:
<!-- Child -->
<template>
<div class="foo">
This is a child
</div>
</template>
<style scoped>
.foo {
color: blue;
}
</style>
还有一个 Parent 具有作用域样式的组件,它在内部也使用 foo 类名,并且还提供了一个插槽:
<!-- Parent -->
<template>
<div class="foo">
<div>This is a parent</div>
<slot></slot>
</div>
</template>
<style scoped>
.foo {
color: red;
margin-bottom: 10px;
}
</style>
将Child 组件嵌套到Parent 组件中作为插槽:
<!-- App -->
<template>
<div>
<Parent>
<Child />
</Parent>
</div>
</template>
<script>
import Parent from "./components/Parent";
import Child from "./components/Child";
export default {
components: {
Parent,
Child
}
};
</script>
实际结果
Parent 中的foo 类的样式也适用于Child 中具有foo 类的元素。这是实际 DOM 的屏幕截图:
预期结果
我希望 Child 的样式将与任何父级隔离。我想知道它是否是设计使然,还是可以在不重命名类的情况下进行修复,因为它会打破隔离的整个想法。
这里有一个CodeSandbox 来玩弄源代码。
【问题讨论】:
-
阻止父样式应用于子元素不是不合逻辑吗?
-
@sklingler93 就常规 CSS 而言,这是合乎逻辑的,其中级联是应用样式的核心,但它就组件而言,我认为子组件应该不受影响,并且绝不会受到它们的上下文的影响除非明确指定,否则都会被使用。
标签: javascript vuejs2 vue-component vue-loader