Css module 和 Scoped
两者都是实现 css 作用域的,css module 通过 className + hash 来实现作用域, scoped 则是 className + [data-v-attrName] 来实现作用域。
css module
- 在
webpack配置的css-loader中添加modules: true配置开启。 template中的类书写为$style.moduleA获取样式style中通过module开启,moduleA为类名- 编译后会直接给类名 加上
hash值,通过 类选择器 命中样式。注意不要使用id选择器
vue
<template>
<p :class="$style.page">css</p>
<p :class="[$style.page, $style.main]">modules</p>
</template>
<style lang="scss" module>
.page { color: #333; }
.main { background-color: #fff; }
</style>编译后,类名增加 hash
html
<p class="page_1nmsErQ">css</p>
<p class="main_suEsjDd">module</p>css
.page_1nmsErQ { color: #333; }
.main_suEsjDd { background-color: #fff; }scoped
template中直接写classstyle上添加scoped编译后会在 组件下的所有标签上 加上额外的
data-v-hash属性,css通过 属性选择器 命中vue<template> <p class="page">css</p> </template> <style lang="scss" scoped> .page { color: #333; } </style>编译后,同一组件拥有同一
hash值的属性选择器css.page[data-v-72j8su6] { color: #333; }html<p data-v-72j8su6 class="page">css</p>