CSS Module 常用笔记

react笔记之css-Module模块化 前端学习 阅读详情

Date: January 30, 2025

CSS

先介绍下普通 CSS,再简明介绍下 css module 的使用

普通 CSS

内联 style

定义:

  • 内联 style 是通过在元素的 style 属性中直接设置 CSS 样式。
  • 这种方式允许我们直接在 JSX 中为组件或元素添加样式。

写法:

<div style={{ color: 'red', fontSize: '20px' }}>
  This is a red text with font size 20px.
</div>

className

定义:

  • className 是通过 CSS 类为元素设置样式。在 React 中,使用 className 替代传统的 class 属性。
  • className 通过引用外部样式表来定义样式,适合复用和组织大规模的样式。

写法:

<div className="red-text large-text">
  This is a styled text.
</div>



CSS Module

概念:

CSS Module 是一种局部作用域的CSS方案,它通过将CSS类名局部化,避免了全局命名冲突的问题。每个CSS类都默认是局部的,只有在特定的组件中才有效。

特点:

  1. 局部作用域:每个CSS类都只作用于当前组件,避免了全局样式污染。
  2. 自动命名:CSS类名会自动生成一个唯一的标识符,以确保类名不重复。
  3. 与组件绑定:CSS模块与React(或其他框架)中的组件紧密绑定,每个组件都有独立的样式。

工作原理:

CSS文件中的类名会被编译器处理成唯一的类名(例如:Button__primary__1k2jd),这个类名与组件的作用域绑定,避免了全局命名冲突。

使用方式:

  1. 创建一个 .module.css 的CSS文件:

    /* Button.module.css */
    .primary {
      color: red;
      background-color: blue;
    }
    
    
  2. 在组件中导入并使用:

    import styles from './Button.module.css';
    
    function Button() {
      return <button className={styles.primary}>Click me</button>;
    }
    
    
  3. 自动生成的类名:styles.primary 实际上会被编译成一个唯一的类名,如 Button_primary__1k2jd。

特点:

优点:

  • 避免类名冲突:每个组件的样式是局部的,不会与其他组件的样式发生冲突。
  • 模块化管理:样式与组件紧密绑定,便于管理和维护。

缺点:

  • 不能全局复用:样式是局部的,如果需要全局样式,则需要使用全局CSS或CSS变量。
  • 需要构建工具支持:如Webpack配置支持CSS Module(通过 css-loader 等)。

安装与配置

webpack配置 css-module

如果你正在使用 Webpack,需要安装 css-loader 和 style-loader:

npm install css-loader style-loader --save-dev

在 webpack.config.js 中配置 CSS Module:

module.exports = {
  module: {
    rules: [
      {
        test: /\\.module\\.css$/,  // 只针对带有 .module.css 的文件
        use: ['style-loader', 'css-loader?modules']  // 启用 CSS Module
      }
    ]
  }
};

创建 CSS Module 文件

创建一个带有 .module.css 扩展名的 CSS 文件。注意,.module.css 表示这个文件是一个 CSS Module 文件。

/* Button.module.css */
.button {
  background-color: blue;
  color: white;
  padding: 10px;
  border-radius: 5px;
}

.buttonHover {
  background-color: darkblue;
}

具体使用

导入和使用 CSS Module:

在组件中导入 CSS Module 文件,并应用类名。CSS类名将会被本地化,避免全局污染。

// Button.jsx
import React from 'react';
import styles from './Button.module.css';  // 导入CSS Module

const Button = () => {
  return (
    <button className={styles.button}>Click Me</button>  // 使用样式
  );
};

export default Button;

生成的类名:

CSS Module 在编译时会为每个类名生成唯一的哈希值。例如,button 类可能会变成 Button_button__1a2b3,从而保证不会与其他组件的样式产生冲突。

<button className="Button_button__1a2b3">Click Me</button>

高级用法

动态类名

CSS Module 可以和 JavaScript 动态交互,允许根据状态或条件动态设置类名。

import React, { useState } from 'react';
import styles from './Button.module.css';

const Button = () => {
  const [isHovered, setIsHovered] = useState(false);

  return (
    <button
      className={isHovered ? styles.buttonHover : styles.button}
      onMouseEnter={() => setIsHovered(true)}
      onMouseLeave={() => setIsHovered(false)}
    >
      Hover Over Me
    </button>
  );
};

export default Button;


合并多个类名:

有时你可能需要将多个类名结合起来,可以使用 JavaScript 的 classnames 库(或者其他库)来处理这种情况。

npm install classnames
import React from 'react';
import classNames from 'classnames';
import styles from './Button.module.css';

const Button = ({ isPrimary, isDisabled }) => {
  const buttonClass = classNames(styles.button, {
    [styles.primary]: isPrimary,
    [styles.disabled]: isDisabled,
  });

  return <button className={buttonClass}>Click Me</button>;
};

export default Button;


样式组合:

CSS Module 中可以引入其他 CSS 文件,避免代码重复。在 CSS Module 中也可以使用 composes 关键字来合并其他类。

/* BaseButton.module.css */
.baseButton {
  padding: 10px;
  font-size: 16px;
  border: none;
}

.primary {
  composes: baseButton from './BaseButton.module.css';
  background-color: blue;
  color: white;
}

.secondary {
  composes: baseButton from './BaseButton.module.css';
  background-color: gray;
  color: black;
}


处理全局样式

CSS Module 默认样式是局部的,但有时你可能希望某些样式是全局的,可以使用 :global 来标记全局样式。

/* Global.module.css */
:global .global-class {
  color: red;
}
// App.jsx
import './Global.module.css';

function App() {
  return <div className="global-class">This is a global style</div>;
}


总结:

  • CSS Module 通过将每个 CSS 类的作用域限制在组件内部,避免了全局样式的污染。
  • 它支持动态类名、样式组合以及通过 composes 关键字复用样式。
  • 适用于大型应用中的样式管理,尤其在组件化的开发中能大大提高维护性和可扩展性。
  • 对于全局样式需求,可以通过 :global 来解决。



西门子S7-1200/1500 PLC编程与应用技巧 西门子S7-1200 PLC是一款紧凑型的控制器,适用于小型到中型的自动化控制任务。紧凑设计:集成了I/O模块,减少了控制柜的空间需求。高性能:高达25µs的扫描时间,能够快速响应。模块化扩展:支持扩展输入输出模块、通信模块和智能模块,满足不同的应用需求。多种编程语言:支持Ladder图(梯形图)、功能块图(FBD)、结构化文本(ST)等多种编程语言。西门子S7-1200与S7-1500 PLC是强大且灵活的工业控制系统,适用于各种自动化应用。 阅读详情

相关推荐

“迎圣诞,拿大奖” 活动赛题 Web-SQLi

1. php中sprintf()函数漏洞原理及其利用; 2. mysql盲注语法及python脚本; 3. sqlmap的需要进一步学习;

qq_34106499的博客 674

了解CSS Module作用域隔离原理

我们知道,Javascript发展到现在出现了众多模块化规范,比如AMD、CMD、 Common JS、ESModule等,这些模块化规范能够让我们的JS实现作用域隔离。CSS Module出现的背景​我们知道,Javascript发展到现在出现了众多模块化规范,比如AMD、CMD、 Common JS、ESModule等,这些模块化规范能够让我们的JS实现作用域隔离。

Jack, what else can you do besides holding your little darling? 1445

别再死记硬背了!用TwinCAT 3手把手教你配置EtherCAT伺服驱动的PDO映射(DS402协议)

本文详细介绍了如何使用TwinCAT 3配置EtherCAT伺服驱动的PDO映射(DS402协议),涵盖环境准备、设备扫描、PDO映射实战及高级技巧。通过具体操作步骤和常见问题排查,帮助工程师快速掌握EtherCAT通信配置,提升运动控制系统的效率和稳定性。

weixin_29185493的博客 322

学习一下CSSModule

什么是cssModule 在js中,我们有大量模块化解决方案,比如es6中的export和import导入导出以及commonJS中的require以及module.export都可以实现私有变量以及全局变量。而在css中,为了实现这css的模块化,主要有下面两种方法: css in js。使用js或者json格式来书写样式,并将样式生成inline-style的形式,这种方式无疑可以让css...

weixin_43801564的博客 2173

UE5新手必看:3种UI定位方法实战(含蓝图配置截图)

本文为UE5新手详细解析了三种核心UI定位方法:屏幕空间、场景空间和世界空间。通过实战蓝图配置与控件操作,指导开发者如何根据HUD、角色血条、3D物体标记等不同应用场景,正确选择并配置UI的定位方式,以实现清晰的信息传递与沉浸式体验。

weixin_29018815的博客 473

微波射频学习笔记18-------偶极子天线和微波天线设计介绍

几种天线设计方法的介绍 一、偶极子天线 1.天线模型 两根紧挨着的金属导体,长度均为四分之一波长,直径均远小于波长,两导体间距也远小于波长。 2.天线性能的设计因素 ① 单个导体长度L:(光速/频率)/4=四分之一波长(在空气中传播的波长),但在导体中传播,波长会变短; ② 导体半径R:远小于波长即可,使用导电率高些的材料,市面上常见直径零点几毫米就挺好,或者用波长/200,得出一个小200的值,也算远小于波长; ③ 两导体间距S:远小于波长即可,可以比半径更小点。 以上三个变量L、R、S,均可在仿真软件

Sil_sprout 1万+

CSS Modules介绍(CSS模块、样式模块)(通过自动创建唯一类名,确保样式在组件级别上被封装,解决了全局样式冲突问题)(将CSS文件视为模块,可以被导入和使用).module.css

CSS Modules 是一种用于模块化和局部化 CSS 的系统。它通过自动创建唯一的类名,确保样式在组件级别上被封装,从而解决了全局样式冲突的问题。CSS Modules 将 CSS 文件视为模块,使得样式可以像 JavaScript 一样被导入和使用。CSS Modules 提供了一种平衡性能与开发体验的 CSS 模块化解决方案。它保留了传统 CSS 的熟悉语法,同时解决了全局命名冲突问题。对于中大型项目和组件库开发,CSS Modules 是一个值得考虑的技术选择。

Dontla的博客 2800

本地部署开源视频会议解决方案 Jitsi Meet 并实现外网访问

Jitsi Meet 是一款基于 WebRTC 技术的开源视频会议解决方案,它允许用户通过互联网进行高质量的视频通话、语音通话和文本聊天,非常适合用于在线教育、远程办公、团队协作等场景。本文将详细介绍如何利用 Docker 在本地部署 Jitsi Meet 并结合路由侠实现外网访问本地部署的 Jitsi Meet。

lyxnwct的博客 1945

前端框架的CSS模块化(CSS Modules)

前端框架的CSS模块化(CSS Modules)

商务合作欢迎私信我 6222

游戏大厂如何解析引擎技术

本文系统解析了游戏大厂如何评估和定制游戏引擎。游戏引擎作为游戏开发的核心基础,大厂会从性能、跨平台支持、渲染能力、网络模块等8个维度进行技术解析,通过文档查勘、源码阅读、Demo测试等7个步骤深度评估。解析后通常有三种决策:直接使用、深度定制或自研重构。文章以腾讯、网易、米哈游等为例,展示了不同厂商的引擎定制策略,并分析了技术解析面临的挑战和未来趋势。最终指出,体系化的引擎技术解析是打造高质量游戏的关键,需要持续的技术投入和团队协作。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 535

SAP Fiori Elements 扩展实战:UI 层扩展、OData 服务扩展、CDS 视图增强及全流程案例

UI 层扩展主要关注在不修改标准生成界面的基础上,自定义用户界面元素和交互逻辑。典型需求包括:在现有 Fiori Elements 界面上添加新的字段(如表格列或表单项)、增加自定义按钮并绑定操作、以及通过控制器扩展加入事件处理等。无论在 RAP 还是传统 BOPF 架构下,前端 UI 扩展通常采用 SAPUI5 提供的**扩展点(Extension Points)和控制器扩展(Controller Extension)**机制来安全地插入自定义代码。下面分别说明两种后端架构下 UI 扩展的实现方式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 900

CSS:CSS Modules

1、css modules作用;2、webpack配置;3、实际使用;4、答疑;

snow的博客 4808

风光互补制氢系统动态仿真建模与性能分析

摘要 本文针对离网型风光互补制氢系统,建立了包含光伏阵列、风力发电机、PEM电解槽、储能电池和储氢罐的完整动态数学模型。基于MATLAB/Simulink平台开发了模块化仿真框架,设计了考虑电解槽最小运行功率约束的能量管理策略。通过典型日仿真分析表明,风光互补可有效平抑单一能源的功率波动,系统整体能量效率达58.7%,电解槽负荷跟随特性良好。提出的动态仿真方法为风光制氢系统的优化设计和运行控制提供了有效工具。 关键词:风光互补制氢;PEM电解槽;动态仿真;MATLAB/Simulink;能量管理

huanghm88的专栏 76

css module global的使用

文章目录文章参考global语法说明单个全局class多个全局classwebpack 如何配置css module 文章参考 (https://www.cnblogs.com/kugeliu/p/7889018.html)[https://www.cnblogs.com/kugeliu/p/7889018.html] global语法说明 单个全局class // css 样式 (:glob...

黄彪博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

CSS Module和Scoped CSS的区别

介绍CSS Modules和Scoped CSS

weixin_75252652的博客 990

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

CSS Module vs CSS-in-JS

CSS Module 是“CSS 原生语法 + 模块化”的妥协,兼顾性能和开发者对 CSS 的熟悉度,适合大多数中大型项目;CSS-in-JS 是“样式与 JS 融合”的激进方案,牺牲部分性能换取动态样式的灵活性,适合样式逻辑复杂、组件化程度极高的场景。实际开发中,两者也可混合使用(如全局样式用 CSS Module,动态组件用 CSS-in-JS),关键是根据项目需求平衡性能、开发效率和可维护性。

2401_89241768的博客 679

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

CSS Module

CSS Module产生背景 在软件工程里面模块指的是可组合、分解和更换的单元。下面是一张css树,项目里面总的css文件是由一系列小的单元组成,比如下面的reset.css就是一个单元。模块化的概念不光在css里面,在JS里面也是同样适用的,我们把代码按照一定的规则和逻辑拆分,分解成可组合可更换的单元,这样就实现了一个最大限度的代码复用。在css中,代码复用只是一个小的方面,更重要的是解决局部...

天空之外 321

CSS Module样式隔离

前端模块化之后,各个模块往往独立开发,合并打包后存在许多同名样式,样式互相覆盖,带来严重的样式污染。

m0_71725283的博客 1642

【React笔记】react项目解决css相互影响,使用局部module.css

【React笔记】react项目解决css相互影响,使用局部module.css

xfzy_的博客 3084

CSS module

在项目中要修改ant design组件的默认样式,但在使用了webpack4 其默认使用CSS模块化, 但CSS Module的使用方式与原来的不一样。 style.css 不使用CSS Module时: 1.引入 import  ''./../style.css;           直接引入后样式是全局的。 2.&lt;div className="table"&gt;&lt;/...

风吹云灭 3209

antd css module

antd css module 配置涉及两个地方 babel.rc webpack.config.js .babelrc { &amp;quot;presets&amp;quot;: [ &amp;quot;react&amp;quot;, [&amp;quot;es2015&amp;quot;,{ &amp;quot;modules&amp;quot;: false }], &amp;quo

泛中游 1700

css module

css module一、css module1.思路2.实现原理3.如何应用样式 一、css module 1.思路 通过命名规范来限制类名太过死板,而css in js虽然足够灵活,但是书写不便。 css module 开辟一种全新的思路来解决类名冲突的问题 css module 遵循以下思路解决类名冲突问题: css的类名冲突往往发生在大型项目中 大型项目往往会使用构建工具(webpack等)搭建工程 构建工具允许将css样式切分为更加精细的模块 同JS的变量一样,每个css模块文件中难以出现冲突

xun__xing的博客 6021

Vue中scoped css和css module比较

scoped css 官网 scoped css可以直接在能跑起来的vue项目中使用。 使用方法: <style scoped> h1 { color: #f00; } </style 使用scoped划分本地样式的结果编译结果如下: h1[data-v-4c3b6c1c] { color: #f00; } 即在元素中添加了一个唯一属性用来区分。 缺点: 一、如果用户在别处定义了相同的类名,也许还是会影响到组件的样式。 二、根据css样式优先级的特性,scoped这种处

King Saj 479

【项目实战篇】CSS Module

Modules 不是官方规范或浏览器中的实现,而是构建步骤中的一个过程(在 Webpack 或 Browserify 的帮助下),它改变了类名和选择器的作用域(即有点像命名空间)默认 Less 或者 CSS 的规则是全局生效的,任何一个组件,只要有同名的 className 就会共用样式。CSS Module 可以有效避免作用域问题,它会生成一个唯一的标识作为 className。在 React 中默认开启了 CSS Module,样式表文件需要以。想要修改第三方组件样式,默认情况通过。

weixin_47002803的博客 403

Taro + Vue 的 CSS Module 解决方案

文章简述了怎么在 Taro + Vue 项目中使用 Css Module 方案,以防止样式污染。

所行皆坦途 1690

CSS Module

css module,react中的css module,css global

~ 594
上一篇: React 低代码项目:项目创建
下一篇: React 低代码项目:组件设计
CaptainDrake
博客等级 码龄6年 5363粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值