CSS module 
说明 && 原理 
- 默认情况下,所有类名称和动画名称都在本地范围内的 CSS 文件
 - CSS 模块不是官方规范或浏览器中的实现,而是构建步骤中的一个过程(在 Webpack 或 Browserify 的帮助下),它更改要限定范围的类名称和选择器(即有点像命名空间)
 - CSS 的规则都是全局的,任何一个组件的样式规则,都对整个页面有效。产生局部作用域的唯一方法,就是使用一个独一无二的 class 的名字,不会与其他选择器重名。这就是 CSS Modules 的做法。
 
demo 
javascript
// 下面是一个组件App.js。
import style from "./App.css";
export default () => {
  return <h1 className={style.title}>Hello World</h1>;
};css
/* App.css */
.title {
  color: red;
}打包构建后
html
<!-- 构建工具会将类名style.title编译成一个哈希字符串。 -->
<h1 class="_3zyde4l1yATCOkgn-DBWEL">Hello World</h1>css
/* App.css也会同时被编译。 */
._3zyde4l1yATCOkgn-DBWEL {
  color: red;
}案例 
1. vue 文件 style 的 scope 就是一种实践 
html
<style scoped>
  .example {
    color: red;
  }
</style>
<template>
  <div class="example">hi</div>
</template>html
<!-- 转换后用自定义属性把类名封装起来了 -->
<style>
  .example[data-v-f3f3eg9] {
    color: red;
  }
</style>
<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>2. vue3 CSS Modules & 与组合式 API 一同使用 
CSS Modules
- 一个 
<style module>标签会被编译为 CSS Modules 并且将生成的 CSS class 作为 $style 对象暴露给组件: 
html
<template>
  <p :class="$style.red">This should be red</p>
</template>
<style module>
  .red {
    color: red;
  }
</style>
和组合式 API 使用
- 可以通过 useCssModule API 在 setup() 和 
<script setup>中访问注入的 class。对于使用了自定义注入名称的<style module>块,useCssModule 接收一个匹配的 module attribute 值作为第一个参数 
javascript
import { useCssModule } from "vue";
// 在 setup() 作用域中...
// 默认情况下, 返回 <style module> 的 class
useCssModule();
// 具名情况下, 返回 <style module="classes"> 的 class
useCssModule("classes");