让前端飞

CSS Modules

2019-01-12  本文已影响50人  Danile_1226

CSS模块化的解决方案有很多,但主要有两类。

CSS模块化遇到了哪些问题?

CSS Modules模块化方案

启用CSS Modules

import styles from './Button.css'

console.log(styles);
// =>
// Object {
//     normal: 'button--normal--abc5436',
//     disabled: 'button--disabled--def884',
// }

注意button--normal--abc5436是CSS Modules按照 localIdenName 自动生成但class 名称,其中 abc5436 是按照给定算法生成但序列码。经过这样混淆处理后, class 的名称基本就是唯一的,大大降低了项目中样式覆盖的几率。

CSS Modules实现以下几点

样式默认局部

.normal {
  color: green;
}

/* 以上与下面等价*/
:local(.normal) {
   color: green;
}

/* 定义全局样式*/
:global(.btn) {
   color: red;
}

CSS Modules 结合 React实践

如果不想频繁输入 styles.** ,可以使用 react-css-modules 库。它通过高阶组件的形式来避免重复输入 style.**。

import styles from './dialog.css'

class Dialog extends Component {
    render () {
      return (
          <div styleName="root">
              <a styleName={aa}>Context</a>
          </div>
      )
    }
}

使用 CSS Modules,容易使用 :global 去解决特殊情况,使用 react-css-modules 可写成 <div className="global - css" styleName="local - modul"></div>,这形式轻松对应全局和局部

上一篇下一篇

猜你喜欢

热点阅读