前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >react中css modules的介绍与使用

react中css modules的介绍与使用

作者头像
用户9914333
发布2022-07-22 14:53:57
1K0
发布2022-07-22 14:53:57
举报
文章被收录于专栏:bug收集

React 中 CSS的规则都是全局的,任何一个组件的样式规则,都对整个页面有效,这可能会导致大量的冲突。也就是说如果我有两个css文件,它们的中的一些样式名是一样的,那么就会被覆盖,简单的解决办法就是将样式的命名变得复杂且不重复,但这样样式多了也很难避免重复,且命名也不会太好看。

那么这个时候就推荐使用CSS Modules 了CSS Modules 的做法就是通过配置将.css文件进行编译,编译后在每个用到css的组件中的css类名都是独一无二的,从而实现CSS的局部作用域。

具体原理可以看看阮一峰老师的博客 CSS Modules 用法教程。

在create-react-app2.0之前的版本,配置CSS Modules是需要eject弹出webpack来配置的,幸运的是,create-react-app自从2.0.版本就已经开始支持CSS Modules了,详见官网。

可见create-react-app对webpack零配置的追求本文主要讲解create-react-app2.0以上版本的CSS Modules的用法:

全局样式 (默认)

命名规则: xxx.css引入方式 import 'xxx.css'

用法:<div className='styleName'>

局部样式(css modules)

注:css modules会默认给类名加上一个唯一标识符(哈希字符串),从而实现类名不重复

命名规则: xxx.module.css

引入方式:import xxx from 'xxx.module.css'

用法:<div className={xxx.styleName}>

css modules语法:

:global(.className)

CSS Modules 允许使用:global(.className)的语法,声明一个全局规则。凡是这样声明的class,都不会被编译成哈希字符串。代码如下:

代码语言:javascript
复制
.title {
  color: red;
}
:global(.title) {
  color: green;
}

:local(.className)

CSS Modules 还提供一种显式的局部作用域语法:local(.className),

下面代码等同于上面的代码:

代码语言:javascript
复制
:local(.title) {
  color: red;
}
:global(.title) {
  color: green;
}

继承

继承在 CSS Modules 中,一个选择器可以继承另一个选择器的规则,这称为"组合"("composition")。使用 composes 属性进行继承

代码语言:javascript
复制
.className {
  background-color: blue;
}
.title {
  composes: className;
  color: red;
}

组件使用样式

代码语言:javascript
复制
import React from 'react';
import style from './test.module.css';

export default () => {
  return (
    <h1 className={style.title}>
      Hello World
    </h1>
  );
  };

最终会看到红色的h1在蓝色的背景上

选择器也可以继承其他CSS文件里面的规则

another.module.css.

代码语言:javascript
复制
className {
  background-color: blue;
}

其它css文件可以继承 another.module.css 里面的规则

代码语言:javascript
复制
.title {
  composes: className from './another.module.css';
  color: red;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档