css-in-js

1.2 CSS Modules

  • CSS Modules: 一个 CSS 文件就是一个独立模块,核心思想是通过组件名的唯一性来保证选择器的唯一性,从而保证样式不会污染到组件外

  • CSS Modules 允许我们像 import 一个 JS Module 一样去 import 一个 CSSModule 每一个 CSS 文件都是一个独立模块,每个类名都是该模块所导出对象的一个属性。通过这种方式,便可在使用时明确指定所引用的 CSS 样式。并且,CSS Modules 在打包时会自动将 id 和 class 混淆成全局唯一的 hash 值,从而比 i 按发生命名冲突问题。

  • 使用 CSS Modules 时,退件配合 CSS 预处理(Sass/Less/Stylus)一起使用

  • CSS 预处理器提供了许多有用的功能,如嵌套,变量,mixins,functions 等,同时也让定义本地名称或全局名称变得容易

    1.3 CSS-in-JS

  • React 的出现,打破了以前关注分离的网页开发原则,因其采用组件结构,而组件又强制要求将 HTML,CSS 和 JS 代码写在一起,表面上看是技术的倒退,实际上并不是

  • React 是在 JS 中实现了对 HTML 和 CSS 的封装,赋予了 HTML 和 CSS 权限的编程能力,对于 HTML,衍生了 JSX 这种 JS 的语法扩展,你可以将其理解未 HTML-in-JS;对于 CSS,衍生除一系列的第三方库,用来加强在 JS 中操作 CSS 的能力,它们被称为 CSS-in-JS

  • 随着 React 的流行以及组件化开发模式的深入人心,这种关注点混合的新写法逐渐称为主流

  • 实现

    • styled-components 36.7k
    • emotion 15k

image

1.13.1 案例

image

image

npm install @emotion/css --save

image

image

image

image

image

image

image

image

image

image

对象支持:

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

image

Last Updated:
Contributors: 刘荣杰