css modules
css modules是一种流行的模块化和组合CSS的系统。通过 css modules 可以确保所有的样式能够服务于单个组件,解决CSS中的全局作用域问题。
使用方式
定义一个样式文件
1 | .title { |
使用
1 | import styles from "./styles.css"; |
当开始构建的步骤时,编译器将会搜索导入的styles.css文件,然后到刚刚写的js文件中,通过styles.title使得.title class可用。构建步骤将会同时处理这些东西成为新的,分离的HTML和CSS文件,并且用一个新的字符串去替换HTML和CSS选择器的class。
通过构建工具生成的HTML就像这样
1 | <h1 class="_styles__title_309571057"> |
主题切换
新建两套主题文件
themeA.less
1 | .h2FontColor { |
themeB.less
1 | .h2FontColor { |
将两套样式存储起来
此处项目为 react ,使用状态管理库 dva 进行存储,其它状态管理库 redux ,mobx ,vux 同理。
src/models/theme.js
1 | import themeA from '../style/theme/themeA.less'; |
组件中切换样式
themeDemo.js
1 | import React, { Component } from 'react'; |
效果图
其它方案
通过查找 github 上 css-modules 项目,发现作者在 theming.md 文档上描述了一种方案,可自行查看。