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

style.jpg
dva-cli 默认开启了css-modules
CSS-modules通过将样式编写成哈希字符串的方式让其变得独一无二。这样就相当于产生了一个局部作用域

import ‘./index.less’

  1. import './index.less' // 造成全局样式污染,重名的会被覆盖

styled.jpg
import ‘./index.less’ -> import styled from ‘./index.module.less’

  1. import styles from "./style.css";
  2. // import { className } from "./style.css";
  3. console.log(styles)
  4. <a styleName={aa}>Context</a>
  5. // index.js & index.module.scss
  6. import styles from './index.module.scss';
  7. <Table
  8. loading={loading}
  9. dataSource={tbody}
  10. className={styles.table}
  11. />
  12. <header className={styles.title}>
  13. <span className={styles.desc}>{value}</span>
  14. </header>
  15. <Link className={styles.link} to="/detail">
  16. <Pagination className={styles.pagination} />
  17. // index.module.scss
  18. .table {
  19. min-height: 500px;
  20. :global {
  21. .header {
  22. table th {
  23. background: #ccc;
  24. }
  25. }
  26. }
  27. }
  28. .link {
  29. margin: 0 5px;
  30. color: rgba(49, 128, 253, 0.65);
  31. text-decoration: none;
  32. cursor: pointer;
  33. &:link,
  34. &:visited {
  35. color: rgba(49, 128, 253, 0.65);
  36. }
  37. }
  38. .pagination {
  39. margin: 20px 0;
  40. text-align: center;
  41. }

css样式管理

  1. style行内样式
  2. css-in-js,css 模块化
    1. styled-components
  3. css Module
    1. 解决命名冲突和样式覆盖
    2. 不污染全局

:global

  1. :global(.classname) {}
  2. :global {
  3. .classname {}
  4. }

css Modules

  1. create-react-app 默认具备 css Module功能
  2. 创建 .css 文件需要 [name].module.css 格式创建
  3. class类名是随机的 hash值
  4. cssModule不是标准,是webpack在构建过程中,对 css类名,动态编译成唯一的 hash字符串

默认和全局样式

  1. .normal {
  2. color: green;
  3. }
  4. /* 以上与下面等价*/
  5. :local(.normal) {
  6. color: green;
  7. }
  8. /* 定义全局样式*/
  9. :global(.btn) {
  10. color: red;
  11. }
  1. /src/Button
  2. /Button.js // jsx组件
  3. /Button.module.css // css样式
  4. // Button.js
  5. import React from 'react'
  6. import styled from './Button.module.css'
  7. export default function Button () {
  8. return <div className={styled.button}></div>
  9. // 编译结果 <div class="Button_button__oL_Ua" role="button"></div>
  10. }
  11. // Buttom.module.css
  12. .button {
  13. --primary: #f90;
  14. --color: #fff;
  15. margin: 10px;
  16. background-color: var(--primary);
  17. color: var(--color);
  18. }

webpack 配置 cssModule

  1. 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 }) } ```