css的模块化
1. 关于less使用建议
1、过渡的嵌套会导致很多问题发生,使代码变得更复杂,而且太过依赖于HTML结构,这样后面要覆盖样式需要依赖于"!important",而这种方式又是我们尽量避免使用的一种
2、嵌套层级不应该超过三层
3、嵌套层级编译出来的CSS,要确保其简洁,可重用
4、使用嵌套很有意义,但并不意味着无限级的嵌套
2.这玩意的好处
解决CSS中的全局作用域问题。说白了就是解决不同页面样式冲突的问题
保留了很好的组件复用性 (composes)
很方便的按需加载
3.启用css modules 只需在webpack中使用css-loader,下面为less中使用
`使用cssmodules后改变css,浏览器会自动刷新,因为他是基于对象的,之前直接写less的时候,需要手动的`
 
  {   test: /\.less$/,   exclude: [/node_modules/],   use: [       require.resolve('style-loader'),       {           loader: require.resolve('css-loader'),           options: {               modules: true,               localIndexName:"[name]__[local]___[hash:base64:5]"           },       },       {           loader: require.resolve('less-loader'),        },   ], }
 
  | 
 
4.    在智慧社区里面使用:
    1. 对于局部css   采用[name]. module.[less | css],
  { test: /\.less$/, use: [   require.resolve('style-loader'),   ({resource}) => ({     loader: 'css-loader',     options: {       importLoaders: 1,       modules: /\.module\.less/.test(resource),       localIdentName: '[name]__[local]___[hash:base64:5]',     },   }),   {     loader: require.resolve('postcss-loader'),     options: {       ident: 'postcss',        plugins: () => [         require('postcss-flexbugs-fixes'),         autoprefixer({           browsers: [             '>1%',             'last 4 versions',             'Firefox ESR',             'not ie < 9',            ],           flexbox: 'no-2009',         }),       ],     },   },   {     loader: require.resolve('less-loader'),     options: {       modifyVars: theme,     },   }, ], }
 
  | 
 
2. 定义全局样式,直接在css|less文件加入:global:
 	:global { 	  .link { 	    color: green; 	  } 	  .box { 	    color: yellow; 	  } 	}
 
  | 
 
3. 对于组件的引入
/* components/Button.css */ .base { /* 所有通用的样式 */ }
  .normal {   composes: base;   /* normal 其它样式 */ }
  .disabled {   composes: base;   /* disabled 其它样式 */ } import styles from './Button.css';
  buttonElem.outerHTML = `<button class=${styles.normal}>Submit</button>`
   | 
 
4.css modules的局限:
1.class名必须是驼峰形式,否则不能正常在js里使用 styles.table 来引用 对此的解决方法
className={styles['tree-component-header']
  | 
 
2.由于css模块化是默认,当你希望使用正常的全局css时,需要通过:local 和 :global 切换,不方便
3.所有的 className 都必须使用 {style.className} 的形式
5.composes 关键词
   .serif-font {       font-family: Georgia,serif;   }   .display {      composes: serif-font;       font-size: 30px;       line-height: 35px;   }}    import styles from "./type.css";  element.innerHTML =   `      <h1 class={styles.display}>          This is a heading      </h1>`          <h1 class="_type__display_0980340 _type_serif_404840">      This is a heading  </h1>
 
  | 
 
最后配上我自己设置的cssModules
 {  test: lessRegex,  exclude: lessModuleRegex,  use: getStyleLoaders(      {        importLoaders: 2,        modules: true,          localIdentName: '[path][name]-[local]-[hash:base64:5]',        sourceMap: isEnvProduction && shouldUseSourceMap,      },      'less-loader'  ),  sideEffects: true }
 
  | 
 
详情看:
1. 如何在react中使用antd+less+css modules
2. 具体使用 结合classnames
3. CSS Modules 详解及 React 中实践