【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
  }
相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰3 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万3 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝3 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋3 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95273 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大3 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师3 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学3 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端