react 中 css scss module


前言

在react项目中,随着项目的庞大模块功能的复杂,引入css文件根据个人情况不同,难免会造成class样式冲突,而且react不像vue,每个组件的样式都会通过scope封装一层,这样就需要自己去注意样式的冲突,css module 就是和vue scope的模式一样,通过对class样式的名字进行封装处理,从而达到class类名不冲突


一、css module

使用.css文件进行模块化,需要webpack配置,使用css-loader开启模块化进而对css文件处理

//webpack chain配置
 config.module
      .rule('css')
      .test(/\.css/)
      .use('css-loader')
      .options({
        modules: true,
        localIdentName: '[name]__[local]--[hash:base64:5]'  // 文件名——calss名--hash前五位
      })
//webpack配置
  module: {
    loaders: [
      {
        test: /\.css$/,
        loader: "style-loader!css-loader?modules"//modules表示开启模块化
      },
    ]
  }

.index.css样式代码如下(示例):

.risk{
    color:red
}

App.js ,以react做例子

import style from './index.css';
 <div className={style['risk']}>
 </div>

从控制台可看出classname变成了如下

<div class='_3zMJvT60v82mw2F5B4PvUX'></div>

二、sass

使用scss module时,文件必须是xxx.module.scss,这样才会被匹配到进行模块化

//index.module.scss
.risk{
    color:red,
    .a{
        height:10px    
    }
}

在App.js,可以看出引入的style打印出来是一个一级对象,文件中嵌套的样式都会被扁平化

//App.js
import style from './index.module.scss';
 <div className={style['risk']}>
 	<div className='a'></div>  	
 </div>
 
//打印出style结果如下
{
    risk:'_3zMJvT60v82mw2F5B4PvUX',
    a:'Fs10_N2mc0ZUpGUE8Bawd'
}

从界面上看出class为a的样式没有作用上,因为按照以上子元素div引入class a的形式,是代表全局样式,当父级元素使用模块化样式后,子集元素也默认使用模块化的class样式,所以a的样式没有作用上,应该修改为style.a的方式引用,或者把a样式使用global设置全局样式

.risk{
    color:red,
    :global{
        .a{
            height:10px    
        }       
    }
}

但是将a样式设置成全局样式后,又可能会造成样式冲突,所以看情况使用,因为我的项目中需要对ant的某些样式进行修改,所以可以使用global

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用提到,使用scss module时,文件必须是xxx.module.scss,这样才会被匹配到进行模块化。在示例代码,index.module.scss文件定义了一个名为.risk的class,并嵌套了一个名为.a的class。这样做可以使样式具有模块化的特性,避免了样式冲突的问题。 引用提到,如果要使用.css文件进行模块化,需要进行webpack配置。使用css-loader开启模块化后,可以对css文件进行处理。在webpack配置,可以通过设置modules为true,来开启模块化,并使用localIdentName来指定样式的命名规则,这样可以确保生成的类名不会冲突。 引用指出,在React项目,随着项目的庞大和模块功能的复杂化,引入css文件可能会导致样式冲突的问题。不像Vue一样,React组件的样式并没有自动进行封装。因此,为了避免样式冲突,可以使用css module来对class样式的名称进行封装处理,以确保class类名不会冲突。 综上所述,scss module是一种在React项目解决样式冲突问题的方法,它通过对class样式的命名进行模块化处理,避免了样式冲突的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [react css scss module](https://blog.csdn.net/weixin_42756432/article/details/117417660)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值