vue内,scoped后,子组件的根节点依然受其父组件的CSS 的影响

292 阅读1分钟

参考vue scoped,子组件的根节点依然受其父组件的CSS 的影响 - 不忘初心dbsdxq - 博客园 (cnblogs.com)

子组件中通过 .root 给了背景色样式为红色,但是在父组件中由于我们意外给了一个同名 .root 样式,导致我们给子组件额外添加了padding间距(注:字体色理论上由于继承关系也会显示为绿色,我们暂不考虑这个)。

原因,因为父组件的生成的唯一标识 'data-v-a83bd3b0' ,也会给子组件根元素加上这个标识,巧合的是,子组件根元素具有 .root 的选择器,刚好使得  .root[data-v-a83bd3b0] 生效。

即使得该样式生效了

通过以上分析,我们知道,以上问题(样式干扰)由两个条件产生:

  ①,父组件唯一标识符属性 data-v-id 也会被添加到 子组件根元素上

  ②,子组件根元素上具有和父组件同名class

解决问题方案(解决原理是将上述任意一个条件使得它不成立,那么问题就不会产生啦)

方案一,避免父组件使用和子组件根元素同名 class(往往很难避免,还需要页面调试查看子组件根元素className)

方案二,给子组件根元素添加一层 div,不添加 class样式(这样的话,父组件生成的data-v-id 便会在该div上,从而使得)推荐