为什么有原子css

之前大家写代码都是定义一个className,然后写一堆样式,如下:

<div className="title">title</div>

.title {
    font-size: 20px;
    font-weight: bold;
    margin-top: 10px;
}

这时候有聪明人想了,能不能每一行的样式都写成一个className,这样我直接写类名就好了;

<div className="fs-20 fw-b mt-10">title</div>

.fs-20 {
    font-size: 20px;
}
.fw-b{
    font-weight: bold;
}
.mt-10{
    margin-top: 10px;
}

然后,把这些通常用的样式放到全局公用,预定义生成好,是不是整个项目都可以用了,后面所有的代码都不用写css了,只要写这些类就好了。这就是CSS原子化。

突然想起来之前css还有命名规范,你知道吗,BEM规范:

.block {}

.block__element {}

.block--modifier {}

block 代表了更高级别的抽象或组件。
block__element 代表 .block 的后代,用于形成一个完整的 .block 的整体。
block--modifier 代表 .block 的不同状态或不同版本。
使用两个连字符和下划线而不是一个,是为了让你自己的块可以用单个连字符来界定。如

用了css原子化之后,基本就告别css命名规范了;

常用的css原子化类库有 tailwind,使用方案就是:

安装包
"postcss": "^8.4.35",
"tailwindcss": "^3.4.1",

css文件中引入
@tailwind base;
@tailwind components;
@tailwind utilities;

tailwind.config.js

export default {
  content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
};

postcss.config.js
export default {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
};

vite会自动识别postcss进行构建;说起postcss,也是很流行的技术,因为支持插件处理,比较方便,比如可以批量处理前缀,支持一些新的css语法等等;

编译时CSS原子化优化

上面说的是最初的方法,直接生成所有的原子css,这样好处是比较简单,但是文件体积也会比较大,可能有很多css用不到。

有一种优化的方案就是按需生成,就是在编译时,遍历所有的文件,找到className, 根据用到的原子css生成对应的css代码;好处是按需减少css体积,坏处是每次编译都要处理;



请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部