CSS Modules

什么是CSS Modules?

官方的介绍是:

所有的 class 的名称和动画的名称默认属于本地作用域的 CSS 文件。

所以 CSS Modules 不是一个官方的规范,也不是浏览器的一种机制,它是一种构建步骤中的一个进程。(构建通常需要 webpack 或者 browserify 的帮助)。通过构建工具的帮助,可以将 class 的名字或者选择器的名字作用域化。(类似命名空间化)。

为什么我们要用CSS Modules?

有了 CSS Modules,就可以确保所有的样式能够服务于单个组件:

  • 集中在一个地方
  • 只应用于那个组件,其他组件不适用

这样设计的目的在于解决 CSS 中的全局作用域问题。

CSS Modules 使用方式

styles.scss

.wrap {
  width: 500px;
  height: 300px;
  padding: 30px 10px;

  .red {
    color: red;
  }
}

foo.js

import styles from "./styles.scss";
import mainStyles from "./main.scss";

class Foo extends React.Component {
    render() {
        return (
            <div className={styles.wrap}>
                <div className={styles.red + ' ' + mainStyles.fs_14}>我是受 CSS Modules 控制的文字。</div>
            </div>
        )
    }
}

Composes 关键词

.serif-font {
    font-family: Georgia,serif;
}
.display {
    composes: serif-font;
    font-size: 30px;
    line-height: 35px;
}

// composes 还能混合外部样式文件的class
.container {
  text-align: left;
  font-size: 20px;
  composes: box from "../styles/layout.scss";
}

使用 composes 关键词会将2个class都绑定到元素上,类似 Sass 中的 @extend。

Webpack 对 CSS Modules 的配置

css modules 最简单的情形,只需要在 css-loader 启动 css module 配置即可。

一般项目中,会有 global.css 这样的全局 css 样式,这些样式不需要用作 css module,此时可以配置两种 css 管理方式(对  global.css 不作 css module 处理,其余的进行 css module 处理)。

webpack.config.dev.js

module: {
     rules: [{
         test: /\.(css|scss)$/,
         exclude: path.resolve(__dirname, 'src/styles/global'),
         use: [
           'style-loader',
           {
             loader: 'css-loader',
             options: {
                 modules: true,
                 localIdentName: '[name]__[local]-[hash:base64:5]'
             }
           },
           'sass-loader'
         ]
      }, {
        test: /\.(css|scss)$/,
        include: path.resolve(__dirname, 'src/styles/global'),
        use: [
          'style-loader',
          'css-loader',
          'sass-loader'
        ]
      }]
   },

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值