-
-
Notifications
You must be signed in to change notification settings - Fork 8.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
scoped style 影响同样式名的子组件 #12040
Comments
As @linzhe141 pointed out, this is the expected behavior and it's kind of a trade-off. |
@Justineo 已经有 :deep 了,还设计的这么复杂干嘛,这样同名样式很容易在不经意间被影响,要小心这么多你们定制的规则,就不能设计的简单点,符合直觉点,不要靠那么多补充来解释出现的问题吗? 我要真想动布局,我不知到给组件传一个 class 或者使用 :deep @Justineo 这样设计无疑给开发者造成了负担,同样是作用于组件的样式。书写样式规则时,有些地方可以不用 :deep , 有些必须使用 :deep ,这会导致混乱。因为我得明确这是在作用于子组件的根元素。但在使用 scoped, 这是对父组件封闭的,我并不知道子组件根元素的样式名。所以加上 :deep 是在明确表示这块样式作用区域扩大到子组件,我可以进行样式上的耦合操作。但是,我们应该尽量避免这样做。 |
@linzhe141 |
你好像还是有一些误解,Vue 并不能区分 class 定义来自哪个组件。核心问题是子组件的根元素是否能被父组件的样式匹配到,如果匹配不到,你在父组件加了 class 依然匹配不到,你不能每个组件都用 :deep 来写定位吧。 PS. 如果你有简单又完备的方案,能解决现存的问题,欢迎去 https://github.com/vuejs/rfcs 完整阐述你的想法。仅仅 diss 和抱怨无法改善现状。 |
使用css module 啊 |
@Justineo 你好像对我说的有些误解,或者你没能完全理解我所表达。
<template>
<div class="page">
<Comp class="comp" />
// 如果该组件根元素的 class 名为 page
// 无形之中父组件的样式会影响到了 Page 组件的样式
<Page />
</div>
</template>
<style scoped>
// 只想作用于子组件的根元素,推荐:
.comp {
}
// 只想作用于子组件的根元素,不推荐
// 另一个开发者看来,这是个 bug, 因为他并不清楚这是作用于子组件的根元素
.page > .innerComp {
}
// 这里明确指明我在作用于子组件样式
.page :deep(.form-item) {
}
</style> |
|
在知道这个问题时,都是使用的 scoped。况且,这是设计的问题,所以提出我的看法 |
Vue version
3.5.3
Link to minimal reproduction
https://play.vuejs.org/#eNqdUsFOwzAM/RWTS0FCLQJOo5sEaBJwAARIXHKpWq/LSJMoSUdR1X/HSdmYBOPALfZ7z36207NLY9J1i2zCcldaYTw49K2ZcSUao62HHiwuYICF1Q0kRE220LVuzFc+zUIQKhHMVamV89C4GqZBfpjcoJQaXrWV1UFyxFWejd2oDwUeGyMLjxQB5JVYQykL56acmaJGzmIeoO+p4jCMQR67Z6MkIw298mynUu78h0RwpTZYUZyGWtAHvimqSqh6AqcnprvgikpGS0EwY8fMk0gtRJ2unFa0mijirKSOQqJ9MF7QgJxNxnIBK2i+97uY87bF402+XGL59kt+5bqQ4+zRokO7pim3mC9sjX6E58/32NF7Cza6aiWx/wCf0GnZBo8j7apVFdne4UW3t/GKtIcXN+88KrcZKhgNzCHyOaOrhmXvG/3b7ll6HnW0Udri5kf8+Fv/On65FLLae2w2fALu7u5V
Steps to reproduce
父组件 scoped style 中样式命中了子组件根节点的同名样式
What is expected?
父组件 scoped style 中样式不应该命中子组件根节点的同名样式
What is actually happening?
no response
System Info
No response
Any additional comments?
No response
The text was updated successfully, but these errors were encountered: