- css 模块化
- 有自己的作用域
- React中的CSS没有域的概念,是全局的样式
- 为每个组件创建一个单一的 .scss文件,并在入口引入相应的样式文件,这些样式也是全局的
- 生成唯一的 class类名,降低项目中样式覆盖
- cssModules
- https://github.com/css-modules/css-modules
- react-css-modules 通过高阶组件的形式来避免重复输入 style.**

dva-cli 默认开启了css-modules
CSS-modules通过将样式编写成哈希字符串的方式让其变得独一无二。这样就相当于产生了一个局部作用域
import ‘./index.less’
import './index.less' // 造成全局样式污染,重名的会被覆盖

import ‘./index.less’ -> import styled from ‘./index.module.less’
import styles from "./style.css";// import { className } from "./style.css";console.log(styles)<a styleName={aa}>Context</a>// index.js & index.module.scssimport styles from './index.module.scss';<Tableloading={loading}dataSource={tbody}className={styles.table}/><header className={styles.title}><span className={styles.desc}>{value}</span></header><Link className={styles.link} to="/detail"><Pagination className={styles.pagination} />// index.module.scss.table {min-height: 500px;:global {.header {table th {background: #ccc;}}}}.link {margin: 0 5px;color: rgba(49, 128, 253, 0.65);text-decoration: none;cursor: pointer;&:link,&:visited {color: rgba(49, 128, 253, 0.65);}}.pagination {margin: 20px 0;text-align: center;}
css样式管理
- style行内样式
- css-in-js,css 模块化
- styled-components
- css Module
- 解决命名冲突和样式覆盖
- 不污染全局
:global
:global(.classname) {}:global {.classname {}}
css Modules
- create-react-app 默认具备 css Module功能
- 创建 .css 文件需要
[name].module.css格式创建 - class类名是随机的 hash值
- cssModule不是标准,是webpack在构建过程中,对 css类名,动态编译成唯一的 hash字符串
默认和全局样式
.normal {color: green;}/* 以上与下面等价*/:local(.normal) {color: green;}/* 定义全局样式*/:global(.btn) {color: red;}
/src/Button/Button.js // jsx组件/Button.module.css // css样式// Button.jsimport React from 'react'import styled from './Button.module.css'export default function Button () {return <div className={styled.button}></div>// 编译结果 <div class="Button_button__oL_Ua" role="button"></div>}// Buttom.module.css.button {--primary: #f90;--color: #fff;margin: 10px;background-color: var(--primary);color: var(--color);}
webpack 配置 cssModule
- eject暴露 webpack配置,找 webpack.confog.js ```jsx npm run eject /config/webpack.config.js, 找到 test:cssRegex
{ test: cssRegex, exclude:cssModuleRegex, use: getStyleLoaders({ importLoaders: 1, modules: true, sourceMap: isEnvProduction && shouldUseSourceMap }) } ```
