浅谈vue3 CSS Modules的使用

        1.概述:一个 <style module> 标签会被编译为 CSS Modules 并且将生成的 CSS class 作为 $style 对象暴露给组件,我们可以通过给module属性赋值来自定义class对象的名字。如:<style module="test">, 则生成的 CSS class 将会作为test对象暴露给组件。

        2.实现作用域隔离的原理:CSS Modules是通过将生成的class哈希化,即给该module里面的class通过一定的配置规则生成一个不重复的名字,从而实现样式隔离。

        3.用法如下:

               注意:不能再通过普通的方法去给元素设置class,而是需要以对象的形式去使用指定module里面的class。

               添加多个class可以通过数组的形式添加,也可以对象的形式添加

<template>
<div :class="[$style['css-demo']]">
    <div>我是css-demo1</div>
    <!-- 添加多个class 数组形式 -->
    <div :class="[$style.text, $style.bg]">class对象默认使用$style作为变量名</div>
    <!-- 添加多个class 对象形式 -->
    <div :class="{[$style.text]: true}">class对象默认使用$style作为变量名</div>
</div>
<div :class="custom['css-demo']">
    <div>我是css-demo2</div>
    <div :class="custom.text">class对象使用自定义变量名</div>
    <div :class="custom.text">class对象使用自定义变量名</div>
</div>
</template>
<!-- 默认使用$style作为变量名 -->
<style module lang="scss">
.css-demo {
    .text{
        color: blue;
        &.bg {
            background-color: #f3f;
        }
    }
}
</style>
<!-- 自定义变量名 -->
<style module="custom" lang="scss">
.css-demo {
    .text {
        color: skyblue;
    }
}
</style>

  从下图可以看出,不同module中同样的类名编译为CSS Modules之后,会生成不同的名字 。

   

        4. useCssModule: 可以通过该API获取指定module的class对象

<script lang="ts" setup>
import { useCssModule } from 'vue';
// 我们可以通过useCssModule来访问对应module的class对象
const def = useCssModule(); // 获取默认的class对象
console.log('def', def);
const custom = useCssModule('custom'); // 获取module名为custom的class对象
console.log('custom', custom);
</script>

  

        5.CSS Modules的应用场景

                一般在jsx、tsx组件内使用,由于无法通过scoped的方式实现样式隔离,所以可以使用CSS Modules来实现样式隔离。 

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值