• CSS Modules使用方法


    CSS Modules使用方法:https://blog.csdn.net/weixin_30267697/article/details/95463897

    css modules调研

    css模块化解决方案

    • 抛弃css (Radium,jsxstyle,react-style)
    • 利用js来管理样式依赖(css Modules)

    css模块化面临的问题

    • 全局污染
    • 命名混乱
    • 依赖管理不彻底
    • 无法共享变量
    • 代码压缩不彻底

    启用CSS Modules,webpack配置

    ...
    {
        test: /.css$/,
        use: [
            {
                loader: 'style-loader'
            },
            {
                loader: 'css-loader?modules&localIdentName=[name]-[hash:base64:5]'
            }
        ]
    },
    ...

    在项目当中使用

    Test.jsx

    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.css

    .test {
        color: red;
    }

    以上就是CSS Modules的基本用法

    用法进阶

    全局样式和局部样式

    开启CSS Modules之后默认的样式都为局部样式

    // 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>
            )
        }
    }

    Compose 组合样式

    // 样式文件
    .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。

    CSS Modules 使用技巧

    • 不使用选择器,只使用class名来定义样式
    • 不叠加多个class
    • 所有样式通过composes组合来实现复用
    • 不嵌套

    CSS Modules React 项目实践

    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>
      }
    }

    关于样式覆盖问题

    因为CSS Modules 不会覆盖属性选择器,所以可以利用属性选择器来解决这个问题

    // 组件中
    ...
    return (
        <div data-role='test'>
            测试
        </div>
    )
    ...
    // 样式
    [data-role="test"] {
        color: red;
    }

    如何与全局样式共存

    import Component from './view/Component'
    // 全局样式
    import './styles/app.scss';
    // 以下为组件相关样式(局部样式)
    import './Component.scss';

    SASS与CSS Modules配合使用

    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'
      }]
    }

    转载于:https://www.cnblogs.com/kugeliu/p/7889018.html

  • 相关阅读:
    数组初始化问题calloc和memset+malloc
    C++四种类型转换
    判断回文
    Linux运维三:系统目录结构
    Linux运维二:CentOS6.6系统安装后的基本配置与优化
    Linux运维一:生产环境CentOS6.6系统的安装
    Linux /etc/issue 和 /etc/issue.net的作用和区别
    linux内核参数注释与优化
    Linux中的文件描述符与打开文件之间的关系
    Linux Wget 命令实例讲解
  • 原文地址:https://www.cnblogs.com/bydzhangxiaowei/p/12532537.html
Copyright © 2020-2023  润新知