美文网首页
css样式设置

css样式设置

作者: shelhuang | 来源:发表于2020-01-15 16:00 被阅读0次

    (1)CSS Modules

    参考资料:http://www.ruanyifeng.com/blog/2016/06/css_modules.html

    1)Webpack 设置

    {

            test: /\.css$/,

            loader: "style-loader!css-loader?modules"     

    }

    在css-loader后面加了一个查询参数modules,表示打开 CSS Modules 功能。

    默认根据[hash:base64]的规则进行hash编码,如果需要自定义编码方式,则修改localIdentName参数

    {

    loader: 'css-loader',

    options: {

    modules: true,

    localIdentName: '[path][name]---[local]---[hash:base64:5]'

    }

    }

    2)全局作用域

    CSS Modules 允许使用:global(.className)的语法,声明一个全局规则。凡是这样声明的class,都不会被编译成哈希字符串,可以全局通用

    不添加global时默认为局部规则,进行哈希编码

    .title {

      color: red;

    }

    :global(.title) {

      color: green;

    }

    相当于:

    :local(.title) {

      color: red;

    }

    :global(.title) {

      color: green;

    }

    3)Class 的组合

    在 CSS Modules 中,一个选择器可以继承另一个选择器的规则,这称为"组合"("composition")。

    App.css中样式为:

    .className {

      background-color: blue;

    }

    .title {

      composes: className;

      color: red;

    }

    选择器也可以继承其他CSS文件里面的规则。比如className在another.css中定义:

    .className {

      background-color: blue;

    }

    App.css可以继承another.css里面的规则。

    .title {

      composes: className from './another.css';

      color: red;

    }

    4)自定义变量

    CSS Modules 支持使用变量,不过需要安装 PostCSS 和 postcss-modules-values。

    $ npm install --save postcss-loader postcss-modules-values

    把postcss-loader加入webpack.config.js。

          {

            test: /\.css$/,

            loader: "style-loader!css-loader?modules!postcss-loader"

          }

    接着,在colors.css里面定义变量。

    @value blue: #0c77f8;

    @value red: #ff0000;

    @value green: #aaf200;

    App.css可以引用这些变量。

    @value colors: "./colors.css";

    @value blue, red, green from colors;

    .title {

      color: red;

      background-color: blue;

    }

    (2)React-classnames库的使用方法

    react原生动态添加多个className会报错

    import style from './style.css'

    <div className={style.class1 style.class2}</div>

    因此想要得到最终渲染的效果,引入classnames库

    npm install classnames --save

    使用:

    import classnames from 'classnames'

    <div className=classnames({

        'class1': true,

        'class2': true

    })>

    </div>

    其他用法:

    classNames('foo', 'bar'); // => 'foo bar'

    classNames('foo', { bar: true }); // => 'foo bar'

    classNames({ foo: true }, { bar: true }); // => 'foo bar'

    classNames({ foo: true, bar: true }); // => 'foo bar'

     //传入动态class

    let buttonType = 'primary';

    classNames({ [`btn-${buttonType}`]: true });

    举例说明:

    不使用classnames时的书写方式:

    var Button = React.createClass({

      // ...

      render () {

        var btnClass = 'btn';

        if (this.state.isPressed) btnClass += ' btn-pressed';

        else if (this.state.isHovered) btnClass += ' btn-over';

        return <button className={btnClass}>{this.props.label}</button>;

      }

    }

    });

    使用了之后可以简化:

    var classNames = require('classnames');

    var Button = React.createClass({

      // ...

      render () {

        var btnClass = classNames({

          btn: true,

          'btn-pressed': this.state.isPressed,

          'btn-over': !this.state.isPressed && this.state.isHovered

        });

        return <button className={btnClass}>{this.props.label}</button>;

      }

    }

    });

    相关文章

      网友评论

          本文标题:css样式设置

          本文链接:https://www.haomeiwen.com/subject/rovtzctx.html