Vue:Scoped与Module解决CSS全局污染与模块化

需积分: 4 0 下载量 19 浏览量 更新于2024-09-04 收藏 3KB MD 举报
Vue.js在开发过程中,经常遇到全局CSS样式冲突和污染的问题。为了解决这些问题,Vue CLI 已内置两种有效的CSS解决方案:Scoped CSS和CSS Modules。本文主要探讨这两种技术的原理和使用方法。 ## CSS Module (模块式CSS)原理 CSS Modules是一种利用JavaScript编译技术,为CSS样式命名添加一个唯一的哈希字符串后缀,确保每个组件的CSS样式在全局范围内是隔离的。这种方式使得每个组件内部的类名变为私有,避免了命名冲突,提高了代码的可维护性和复用性。 ## Scoped CSS ( scoped ) Scoped CSS是Vue.js中的一种特性,当style标签带有`scoped`属性时,其样式会仅应用于当前组件内的元素。这得益于PostCSS库,它会在编译过程中为样式选择器添加一个动态的唯一标识,如`data-v-469af010`,使得CSS选择器变成`.box[data-v-469af010]`。这样,即使类名相同,其他组件也无法间接影响到这些样式,从而实现了组件间的样式隔离。 ### 使用场景与限制 1. **父子组件交互**: - 父组件无`scoped`,子组件有`scoped`:父组件无法直接修改子组件的样式,因为子组件的样式具有唯一标识。尽管可以通过全局选择器设置样式,但可能影响其他组件的样式。 - 父组件有`scoped`,子组件无`scoped`:情况类似,父组件由于自身也带有唯一标识,所以无法直接操作子组件样式。 - 父子组件都有`scoped`:同理,使用深度选择器(`>>>`)才能在父组件内修改子组件的样式,增加了代码复杂性。 2. **权重与优先级**: - 当在子组件使用了`scoped`,父组件试图修改子组件样式时,由于Vue的CSS权重规则,通常需要使用`>>>`或通过组件内`ref`或`v-bind:class`等特性来精确控制样式。 Scoped CSS和CSS Modules是Vue.js中处理样式隔离的有效工具,它们能帮助开发者解决样式污染问题,提升代码组织和维护性。在实际开发中,根据项目需求和组件之间的依赖关系,灵活选择和使用这两种技术可以提高开发效率和代码质量。

98% after emitting CopyPlugin ERROR Failed to compile with 121 errors 下午1:57:47 error in ../workflows/module/workflow/module/workflowModal.vue?vue&type=style&index=0&id=1daa1fe1&lang=scss&scoped=true Syntax Error: ^ Can't find stylesheet to import. ╷ 2 │ @import "@dataspherestudio/shared/common/style/variables.scss"; │ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ╵ stdin 2:9 root stylesheet in D:\gdongt\packages\workflows\module\workflow\module\workflowModal.vue (line 2, column 9) @ D:/gdongt/node_modules/vue-style-loader??ref--8-oneOf-1-0!D:/gdongt/node_modules/css-loader??ref--8-oneOf-1-1!D:/gdongt/node_modules/@vue/cli-service/node_modules/vue-loader/lib/loaders/stylePostLoader.js!D:/gdongt/node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-2!D:/gdongt/node_modules/cache-loader/dist/cjs.js??ref--0-0!D:/gdongt/node_modules/vue-loader/dist??vue-loader-options!../workflows/module/workflow/module/workflowModal.vue?vue&type=style&index=0&id=1daa1fe1&lang=scss&scoped=true 4:14-475 15:3-20:5 16:22-483 @ ../workflows/module/workflow/module/workflowModal.vue?vue&type=style&index=0&id=1daa1fe1&lang=scss&scoped=true @ ../workflows/module/workflow/module/workflowModal.vue @ ../workflows/module sync ([a-z|A-Z])+.vue$ @ ./node_modules/dynamic-modules.js @ ./src/dynamic-apps.js @ ./src/main.js @ multi (webpack)-dev-server/client?http://192.168.100.70:8080/sockjs-node (webpack)/hot/dev-server.js ./src/main.js error in ../dataService/module/dataManagement/apiIndex.vue?vue&type=style&index=0&id=4fda01e9&lang=scss&scoped=true

2023-06-08 上传