CSS module

server/2025/2/5 22:40:59/

css_module_0">css module

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

思路

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

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

在这里插入图片描述

实现原理

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

css-loader 的实现方式如下:

在这里插入图片描述

原理极其简单,开启了css module 后,css-loader 会将样式中的类名进行转换,转换为一个唯一的 hash 值。

由于 hash 值是根据模块路径和类名生成的,因此,不同的 css 模块,哪怕具有相同的类名,转换后的 hash 值也不一样。

在这里插入图片描述

如何应用样式

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

为了解决这个问题,css-loader 会导出原类名和最终类名的对应关系,该关系是通过一个对象来描述的。

在这里插入图片描述

这样一来,我们就可以在 js 代码中获取到 css 模块导出的结果,从而应用类名了。

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

其他操作

全局类名

某些类名是全局的、静态的,不需要进行转换,仅需要在类名位置使用一个特殊的语法即可:

css">:global(.main){...
}

使用了global的类名不会进行转换,相反的,没有使用global的类名,表示默认使用了 local:

css">:local(.main){...
}

使用了 local 的类名表示局部类名,是可能会造成冲突的类名,会被 css module 进行转换。

如何控制最终的类名

绝大部分情况下,我们都不需要控制最终的类名,因为控制它没有任何意义。

如果一定要控制最终的类名,需要配置 css-loader 的 localIdentName

其他注意事项

  • css module 往往配合构建工具使用。
  • css module 仅处理顶级类名,尽量不要书写嵌套的类名,也没有这个必要。
  • css module 仅处理类名,不处理其他选择器。
  • css module 还会处理 id 选择器,不过任何时候都没有使用 id 选择器的理由。
  • 使用了 css module 后,只要能做到让类名望文知意即可,不需要遵守其他任何的命名规范。
    择器,不过任何时候都没有使用 id 选择器的理由。
  • 使用了 css module 后,只要能做到让类名望文知意即可,不需要遵守其他任何的命名规范。

http://www.ppmy.cn/server/165257.html

相关文章

PyTorch 与 Python 版本对应关系

PyTorch 支持多个 Python 版本,但不同版本的 PyTorch 可能对 Python 版本有不同的要求。一般来说: PyTorch 与 Python 版本对应关系 PyTorch 版本支持的 Python 版本2.2.x3.8 - 3.122.1.x3.8 - 3.112.0.x3.8 - 3.101.13.x3.7 - 3.101.12.x3.7 - 3.101.…

C++中常用的十大排序方法之4——希尔排序

成长路上不孤单😊😊😊😊😊😊 【😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C中常用的排序方法之4——希尔排序的相…

北京门头沟区房屋轮廓shp的arcgis数据建筑物轮廓无偏移坐标测评

在IT行业中,地理信息系统(GIS)是用于处理、分析和展示地理空间数据的重要工具,而ArcGIS则是GIS领域中的一款知名软件。本文将详细解析标题和描述中提及的知识点,并结合“门头沟区建筑物数据”这一标签,深入…

LabVIEW图片识别逆向建模系统

本文介绍了一个基于LabVIEW的图片识别逆向建模系统的开发过程。系统利用LabVIEW的强大视觉处理功能,通过二维图片快速生成对应的三维模型,不仅降低了逆向建模的技术门槛,还大幅提升了建模效率。 ​ 项目背景 在传统的逆向建模过程中&#xf…

C++多线程编程——基于策略模式、单例模式和简单工厂模式的可扩展智能析构线程

1. thread对象的析构问题 在 C 多线程标准库中,创建 thread 对象后,必须在对象析构前决定是 detach 还是 join。若在 thread 对象销毁时仍未做出决策,程序将会终止。 然而,在创建 thread 对象后、调用 join 前的代码中&#xff…

【2024 年度总结】从小白慢慢成长

【2024 年度总结】从小白慢慢成长 1. 加入 CSDN 的契机2. 学习过程2.1 万事开头难2.2 下定决心开始学习2.3 融入技术圈2.4 完成万粉的目标 3. 经验分享3.1 工具的选择3.2 如何提升文章质量3.3 学会善用 AI 工具 4. 保持初心,继续前行 1. 加入 CSDN 的契机 首次接触…

Web - CSS3基础语法与盒模型

概述 这篇文章是关于 Web 前端 CSS3 的基础语法与盒模型的讲解。包括 CSS3 层叠性及处理冲突规则、伪元素和新增伪类元素、属性选择器等。还介绍了文本与字体属性,如段落和行相关属性、字体文本属性。最后阐述了盒子模型,如元素隐藏、行内与块元素转换、…

用 cv2.rectangle 为图像加框,轻松实现目标标注与检测

前言 图像处理,有时候就像艺术创作:一笔简单的勾画,瞬间让世界焕然一新。今天,我们不画风景画,专注在如何用 OpenCV 的 cv2.rectangle 给图像加个矩形框。看似简单,实则这一小步往往能为后续的图像处理带来意想不到的便利。准备好迎接这段“小小框框”的探索之旅吗?让我…