css in js的优势

什么是 css in js

用 js 的方式管理 css。

这段代码来自 styled-components 官网。
Button 是一个样式组件。

const Button = styled.a`
  display: inline-block;
  border-radius: 3px;
  padding: 0.5rem 0;
  margin: 0.5rem 1rem;
  width: 11rem;
  background: transparent;
  color: white;
  border: 2px solid white;
  ${props =>
    props.primary &&
    css`
      background: white;
      color: palevioletred;
    `}
`;

css 发展历程

pure css

如果网站够小,使用css是没有问题的。但是随着网站的扩充,css会变的难以维护。

css preprocessor

css 预处理是用一种新语法去描述样式,最后会被编译成 css 文件,常见的Less、Sass。

优势
  • 提供变量、mixin 等语法支持
  • 解决兼容性问题
劣势
  • 命名重复,为了名称不重复导致名称越来越长
  • 两种维护方式,一种是 js 模块,一种是 scss 方式(全局变量文件,各种 mixin 文件)

为什么要用 css in js

css in js 解决了 css 到 dom 的 mapping 问题

css preprocessor 需要去配置 loader ,将 scss 文件转成 object ,通过 item-list key 来找到 scss 文件中对应的样式。

import styles from "./styles.scss";

<div className={styles["item-list"]} />;
:local(.item-list) {
  color: grey;
}

css in js 可以直接跳转,不需要依赖字符串去找到对应的样式了。
css in js 不仅解决映射的问题,还解决了代码重用的问题。
react 和 vue 这些框架的出现,前端就开始多了很多组件,就是为了代码重用。
现在一个样式就可以是一个组件,样式可以像一个模块一样重用,不需要污染全局命名了。

css in js 的优势

  • 类名可以直接跳转
  • 不需要依赖字符串去找到对应的样式了
  • 本身就是一个模块,不需要关心命名冲突,懒加载等问题。
  • 统一用 js 的方式管理,不存在 scss 变量和 js 变量
posted @ 2022-01-12 17:15  远方的少年🐬  阅读(155)  评论(0编辑  收藏  举报