【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
  }
相关推荐
豹哥学前端1 小时前
事件循环(Event Loop)深度解析:让你彻底搞懂 JS 的执行顺序
前端·javascript·面试
前端不开发1 小时前
用一个 Bookmarklet(书签脚本),给任意网页挂一个可拖拽悬浮窗
前端·javascript
接着奏乐接着舞1 小时前
【无标题】
开发语言·前端·javascript
Ian在掘金1 小时前
SSE 还是 WebSocket?从 AI 流式输出聊到实时通信选型
前端·人工智能
雨雨雨雨雨别下啦1 小时前
心理健康AI助手 - 项目总结
前端·javascript·vue.js·人工智能·信息可视化
PILIPALAPENG1 小时前
第4周 Day 3:多 Agent 协作——让 Agent 们"组队干活"
前端·人工智能·python
小江的记录本2 小时前
【Java基础】核心关键字:final、static、volatile、synchronized、transient(附《思维导图》+《面试高频考点清单》)
java·前端·数据结构·后端·ai·面试·ai编程
风之舞_yjf2 小时前
Vue基础(32)_TodoList案例
前端·javascript·vue.js