css module

27 篇文章 4 订阅
25 篇文章 0 订阅

一、css module

1.思路

通过命名规范来限制类名太过死板,而css in js虽然足够灵活,但是书写不便。
css module 开辟一种全新的思路来解决类名冲突的问题

css module 遵循以下思路解决类名冲突问题:

  1. css的类名冲突往往发生在大型项目中
  2. 大型项目往往会使用构建工具(webpack等)搭建工程
  3. 构建工具允许将css样式切分为更加精细的模块
  4. 同JS的变量一样,每个css模块文件中难以出现冲突的类名,冲突的类名往往发生在不同的css模块文件中
  5. 只需要保证构建工具在合并样式代码后不会出现类名冲突即可

在这里插入图片描述

2.实现原理

在webpack中,作为处理css的css-loader,它实现了css module的思想,要启用css module,需要将css-loader的配置modules设置为true

css-loader的实现方式如下:
在这里插入图片描述
原理极其简单,开启了css module后,css-loader会将样式中的类名进行转换,转换为一个唯一的hash值。

由于hash值是根据模块路径和类名生成的,因此,不同的css模块,哪怕具有相同的类名,转换后的hash值也不一样。
在这里插入图片描述

3.如何应用样式

css module带来了一个新的问题:源代码的类名和最终生成的类名是不一样的,而开发者只知道自己写的源代码中的类名,并不知道最终的类名是什么,那如何应用类名到元素上呢?

为了解决这个问题,css-loader会导出原类名和最终类名的对应关系,该关系是通过一个对象描述的
在这里插入图片描述
这样一来,我们就可以在js代码中获取到css模块导出的结果,从而应用类名了

style-loader为了我们更加方便的应用类名,会去除掉其他信息,仅暴露对应关系

// src/index.js
import style1 from  "./assets/style1.css"
import style2 from "./assets/style2.css"
console.log(style1)
const div1 = document.getElementById("div1");
div1.className = style2.c1;

在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vite 是一个非常快速的前端构建工具,它内置了对 CSS 的支持,包括 CSS 模块化。下面是在 Vite 中实现 CSS 模块化的步骤: 1. 安装依赖 首先,您需要安装 `sass` 和 `sass-loader` 依赖项,它们将帮助您在 Vite 中使用 CSS 模块化。 ``` npm install sass sass-loader --save-dev ``` 2. 配置 `vite.config.js` 在 `vite.config.js` 中,您需要配置 `css` 属性来启用 CSS 模块化和 `sass` 预处理器。例如: ``` import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], css: { modules: { localsConvention: 'camelCaseOnly' }, preprocessorOptions: { scss: { additionalData: `@import "@/styles/variables.scss";` } } } }) ``` 在上面的示例中,`css.modules` 属性启用了 CSS 模块化,并将类名转换为 CamelCase 格式。`preprocessorOptions.scss` 属性启用了 `sass` 预处理器,并将全局变量文件导入到所有样式文件中。 3. 创建样式文件 在您的样式文件中,您可以使用 `:local()` 选择器来定义局部样式。例如: ``` .container { padding: 10px; background-color: white; border-radius: 5px; :local(.title) { font-size: 18px; color: #333; } :local(.description) { font-size: 14px; color: #666; } } ``` 在上面的示例中,`:local()` 选择器定义了 `.title` 和 `.description` 类的局部样式。 4. 在组件中使用样式 在您的组件中,您可以像这样导入样式文件: ``` <template> <div class="container"> <h2 class="title">Title</h2> <p class="description">Description</p> </div> </template> <style module> @import "@/styles/your-styles.scss"; </style> ``` 在上面的示例中,`<style module>` 标签启用了 CSS 模块化,并导入了样式文件。然后,您可以像这样在组件中使用局部类名:`.title` 和 `.description`。 这就是在 Vite 中实现 CSS 模块化的基本步骤。希望对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值