【CSS】业界内CSS的实现方案

几个大的方向

CSS modules

原理

编译的css的class会编译成一个海西字符串,在webpack的css-loader中这样配置

js 复制代码
   {
        test: /.css$/,
        loader: "style-loader!css-loader?modules"
      }

css-loader 默认哈希规则是 [hash:base64],也可以更改定制哈希样式

bash 复制代码
 {
      test: /.css$/,
      loader: "style-loader!css-loader?modules&localIdentName=[path][name]---[local]---[hash:base64:5]"
    },

一些用法

全局作用域

css 复制代码
.title {
  color: red;
}

:global(.title) {
  color: green;
}

这种方式不会被编译成哈希字符串,虽然经常用,但是不知道为啥,学到了学到了

显示的局部作用域语法

css 复制代码
:local(.title) {
  color: red;
}

:global(.title) {
  color: green;
}

通常搭配预编译语言(如less/Sass),我们的方案是less+css module,这应该也是使用最多的解决方案

问题

编译速度的问题,如何慢? css module 原理是什么为何慢?我们

CSS in JS

原理

我理解会在head部分动态插入style的方式,如

加的太多,必定会影响性能,有大佬尝试extract-css-webpack-plugin提取单独的css解决

问题

  • 运行时性能问题

    动态用js生成style标签,有计算的消耗;js变大了,有额外的解析js文件的消耗;缓存命中的问题,这个不是很理解

  • 和SSR兼容的问题

    如果使用css in js的方式覆盖组件,会导致 css in js的方式遭遇antd,导致样式不对

  • 上手成本

  • 文件体积线性增长

  • 基于cssom的插入优化和qiankun的冲突问题

业内解决方案

style-component

style-component

emotion

emotion

vanilla-extract

vanilla-extract

linaria

linaria

上述css in js方案通过编译时提取样式,解决运行时性能的问题

Atom CSS

业务解决方案

tailwindcss

能解决【文件体积线性增长】的问题,Tailwind适用于做对短快平的网站,因为他内置的设计元素好看又好用。定制版话可以 UnoCSS 或者Vailla Extract+SprinkLess

windicss

windicss

Atom CSS in JS

atomic-css-in-js这个应该是 Atom CSS 与CSS in js的结合体,在CSS in JS的基础上以 Atom CSS的形式输出

业内解决方案

Meta的stylex

微软的griffel

引用

思考

1、babel-plugin-import 究竟是在做一件什么事情

2、我们项目中在本地联调的时候会碰到,使用css modules的时候,加载顺序冲突的问题,很不稳定,切换下页面就好了。 比如期望是red,而不是默认的blue

css 复制代码
:global{
  .ant-button{
    color: red
  }
}

.ant-button{
    color: blue
  }
相关推荐
骑自行车的码农16 小时前
🕹️ 设计一个 React 重试
前端·算法·react.js
小林攻城狮16 小时前
echarts 参考线实现数据项之间的差异值标注
前端·echarts
青莲84317 小时前
Java并发编程高级(线程池·Executor框架·并发集合)
android·前端·面试
程序员Agions17 小时前
Flutter 邪修秘籍:那些官方文档不会告诉你的骚操作
前端·flutter
白驹过隙不负青春17 小时前
Docker-compose部署java服务及前端服务
java·运维·前端·docker·容器·centos
满天星辰17 小时前
Vue.js的优点
前端·vue.js
哒哒哒52852017 小时前
React createContext 跨组件共享数据实战指南
前端
怪可爱的地球人17 小时前
UnoCss最新配置攻略
前端
Carry34517 小时前
Nexus respository 搭建前端 npm 私服
前端·docker
满天星辰17 小时前
使用 onCleanup处理异步副作用
前端·vue.js