CSS Modules 使用手册

136 阅读1分钟

CSS Modules 就是对css加了局部作用域和模块依赖。

一:局部作用域

在做SPA项目时,所有css都将会被打包进main.css并全局引用,这将是件极其恐怖的事。你无法知道所有的css合并后带来的影响,也很难定位问题。

所以css作用于局部作用域就很重要,而如何实现,那就是给class取一个唯一的名字,不会与其他class重名。

而CSS Modules就是这样做的。

一个React轮播图组件

index.less:

.main { color: red; }

index.jsx:

import { Carousel } from 'antd-mobile';
import styles from './index.less';

const carouselImgs = [];

export default () => {
  return (
    <Carousel className={styles.main} autoplay={true} infinite>
      {carouselImgs.map(item => (
        <img src={item.src} alt={item.alt} />
      ))}
    </Carousel>
  );
};

我们将index.less文件import到styles对象,然后用styles.main去使用该class,那么这样做会出现什么效果呢?

1.png 很明显,styles.main被编译成一个哈希字符串了。那么main这个类自然也就不会重名了,达到了我们想要的结果。

二:全局作用域

那么如果我们希望class不被编译成哈希,全局都可以使用呢?

CSS Modules 提供了:global语法,但凡这样声明的class,都不会被编译。

  .king {
    color: blue;
  }
}

<div className="king">king</div>

2.png

果然和我们想的一样!完美!但是注意在使用全局class的时候,不可以使用styles.king,否则无法编译。

三:定义变量

.king {
  @blueCOlor: #0c77f9;
  color: @blueCOlor;
}

我们还可以定义变量达到复用效果。

四:class组合

.colorRed{
  color: red;
}

.king {
  composes: colorRed
}

我们可以使用composes组合class,实现继承的功能。

五:引入其他模块

.king {
  composes: colorYellow from './test.less'
}

我们可以通过其他样式文件引入class进行组合。