... { test: /\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader?modules&localIdentName=[name]-[hash:base64:5]' } ] }, ...
import React, { Component } from 'react'; // 将样式文件当成模块引入 import styles from "./test.css"; export default class Test extends Component { render() { return ( <div> <div className={styles.test}>测试</div> </div> ) } }
.test { color: red; }
以上就是CSS Modules的基本用法css
开启CSS Modules以后默认的样式都为局部样式html
// css 样式 (:global)(.test1) { color: blue; } 或者以下(定义多个全局样式) :global { .test1 { color: blue; } .test2 { color: red; } } // 全局样式写法和以前同样 import React, { Component } from 'react'; import styles from "./test.css"; export default class Test extends Component { render() { return ( <div> <div className="test1">测试</div> </div> ) } }
// 样式文件 .base { font-size: 20px; } .normal { composes: base; color: #333; } .disabled { composes: base; color: #ddd; } // 组件中 import React, { Component } from 'react'; import styles from "./test.css"; export default class Test extends Component { render() { return ( <div> <div className="normal">测试</div> </div> ) } } // 编译后的html文件 <d class="div--base-daf62 div--normal-abc53">测试</div> // 因为在 .normal 中 composes 了 .base,编译后会 normal 会变成两个 class。
import classNames from 'classnames'; import styles from './dialog.css'; export default class Dialog extends React.Component { render() { const cx = classNames({ [styles.confirm]: !this.state.disabled, [styles.disabledConfirm]: this.state.disabled }); return <div className={styles.root}> <a className={cx}>Confirm</a> ... </div> } }
// 组件中 ... return ( <div data-role='test'> 测试 </div> ) ... // 样式 [data-role="test"] { color: red; }
import Component from './view/Component' // 全局样式 import './styles/app.scss'; // 如下为组件相关样式(局部样式) import './Component.scss';
module: { loaders: [{ test: /\.jsx?$/, loader: 'babel' }, { test: /\.scss$/, exclude: path.resolve(__dirname, 'src/styles'), loader: 'style-loader!css-loader?modules&localIdentName=[name]__[local]!sass?sourceMap=true' }, { test: /\.scss$/, include: path.resolve(__dirname, 'src/styles'), loader: 'style-loader!css-loader!sass-loader?sourceMap=true' }] }