2024 年了,现在 REACT 中使用 CSS 的 Nodejs 相关正确姿势是什么?
楼主不是搞前端开发的,偶尔写过一些前端程序。最近要做个自用的小项目。
3-4 年前写的 vue2 ,还是 class component ,在.vue
里面写 sass ,然后手动判断给 div 加不同 class name 。
最近看一些 react 都在用什么css-in-js
,感觉很乱,没太看懂,怎么像 sass 一样 import 公用样式和使用其他 css Framework 的变量。
所有请教下大家现在 react 下 css 都用什么?
PS 。个人不是很喜欢Tailwind CSS
这种。
2024 年了,现在 REACT 中使用 CSS 的 Nodejs 相关正确姿势是什么?
react 我个人用 tailwind 。但是实际上无所谓,自己的项目,你怎么舒服怎么来。
现在主流 tailwind 吧,不喜欢也可以变喜欢。
同不喜欢 tailwind 和 css in js…
用来用去,tailwind 是终点
同不喜欢 css in js ,非常不喜欢,我比较喜欢用 CSS module
css in js 设计不好有很大的性能问题,隔壁的 antd5 就是这么的😂。我自己 tailwind 、css module 、传统的手搓 css 都可以,没啥偏好。tailwind 好就好在快,但是维护确实是个大问题。
unocss + UI 框架;大部分样式 UI 框架都处理好了,用 unocss 稍微调整 margin 、padding 也就没啥了
自己有 css 架构能力,用 module+sass 自己写也行,没有的话还是用比较成熟的方案。
公司项目:老板要求用啥就用啥
个人项目:那个用着舒服用那个
emotion
已经变成 tainwind 的模样了
sass 跟 tailwind 一起用, 主题变量在 tailwind 上设置, 通过 tailwind 插件生成对应的 variable.scss 给 sass 使用。
不喜欢 tailwind+1
明明只是一部分人的狂欢,不知道为什么要宣传成“主流是 tailwind”
如果也不喜欢 emotion 之类的方案,可以考虑还是用 less 、sass 这种,很容易理解,维护也很方便
之前我也把各种 CSS 的编写位置都尝试了一遍,感觉没有哪一种让我感到很丝滑,就只论 css 编写位置这快,我个人站 Vue ,所以问题来了,有没有大哥研究过怎么在 React 的组件中写一个 style 标签用来编写样式的方法?
你可以用 styled-components 的 globalStyle ,在你的组件局部引用来达成这个效果
抱歉我用 unocss
tailwind +1
个人项目用 Tailwind ,公司项目 unocss
styled-components 做过国外大公司项目,就是用这个
好的,感谢,我去研究下看看
antd5 确实用起来卡卡的,感觉明显没有其他的 React UI 组件快,但是这确定是 css-in-js 导致的的问题吗?另外有点好奇 tailwind 维护有什么问题嘛?我目前只在公司项目小范围用过 tailwind 所以还没发现什么坑,不知道深度使用后可能会有哪些问题呢?
你们说用 tailwind 的,是怎么实现设计稿效果的?还是说 ui 就是按照 tailwind 风格来的?
因为个人项目吗,维护一次都是按月起步。就是想以后看代码的时候方便点。
以前 VUE 是可以把 html ,js ,css 写在一个文件里面。麻烦的地方就是 component classname 的选择,比如什么 active ,hot 之类的。
现在有什么库搞这种 classname 简单一点呢?
jsx 可以把 css ( sass )写在一个 jsx 文件里面吗?
tailwind 不就是个原生 css 的语法糖吗?编译器帮你还原成原生 css ,你该不会说的是 tailwind 那些 component 、templates ?
对,最开始写的网页的时候就是 sass+bootstrap ,那时候还是后端渲染,python2 + jinja2 做内部应用。ajax+jquery 。
#26 tailwind 也可以自定义啊。按你设计稿子定不就好了
就普通的 scss nextjs 用 CSS module
不喜欢 tailwind
不好意思刚才好像搞错了,你这个需求,就用 styled-components 实现最外层的标签,然后内部还是按照传统 css 或者 sass 的写法即可,这样的话外层通过 hash 保持一个 scope ,内层的类名等被这个 scope 限制,这样应该是相对接近 vue 那个
+1 scss 的嵌套语法 + css module 就好了 方便又直观
tailwind / module css
感觉目前最佳方案是 styled-component+tailwind ,兼具灵活性与好的维护性(指代码整洁以及后期修改)
大部分 CSS 方案都在大型工程用过,抛开组件库这种特殊的不讨论,日常偏界面的基本上这种用起来体验最佳:
1. styled-component 用作较多样式组件的样式编写
2. tailwind 补充解决少量样式的组件
这样编写速度最快,也不会产生 tailwind 一堆看着眼花的样式名
觉得长可以用 啊
我怎么感觉在混淆概念呢
styled-component
sass / postcss
css modules / bem
tailwind css
又不是不能一起用………
发现好多人对 tailwind 有偏见啊,又不是非得在 html 里面堆 class names ,你可以在 css 里面使用
而且可以很方便的自定义或者引入扩展,用于处理全面屏 safe area ,或各种基于 class name 方案的 icon 库
主要是侵入性, 已有项目引入 Tailwindcss 加上一堆配置会提高项目混乱度, 项目引入新依赖得找组长讨论, 但是引入新 css 不用. 至于 其实用处不大, 主要是用来配置通用样式的, 但现在组件化后绝大多数 class 样式其实并不相似很难提取通用或者没意义,配来配去最后又回到 className 那一套了,
特殊情况高亮或者变颜色要如何解决呢。
举个例子<br><text class="w-200 c-gray fs-14">规格</text><br><text class="grow t-r fs-14">{{ good.specification }}</text><br>
如果我想good.specification
= A 是蓝色,B 是红色,X 背景是黑色…
当有什么适老化,主题化的时候 styled component 真的很香
用 clsx 之类的包一下
#40 我在 vue 中一般是 v-if 或者干脆 {specification:‘A’}[specification]解决, 或第三方组件会有 getRowClassName 之类的回调函数, 这部分操作属于框架层了具体看框架, 库本身只是解决 css 问题
#30 我理解用 tailwind 提供了一大堆内置的 class 样式,然后只要在 html/模板/jsx 里面写 class 就可以了
但是我试了一下发现内置样式都是 w-24 h-24 text-lg 这种,然后设计稿又不是这个尺寸,然后就会写出大量的 h-[28px]这种硬编码的长度。感觉很难受。
不涉及到大小的时候,比如 flex 相关的那些 class 名字还是很好用的。
简单的 三四个属性内用 tailwind ; 非常复杂的 就写到 less 文件内
tailwind 找到感觉后还是非常好用的
tw 好用的一批。公共样式 apply 一下就行了。出活快才是关键。
#32 好的,感谢指点
不喜欢 css in js ,非常不喜欢,喜欢用 CSS module
#44 用你所需的就行。额外的自己写 css 就好了,tailwind 也支持
重构的时候就知道 tailwind 香了
<br>const submitBtn = Spark.Fixed({<br> style: {<br> width: "50px",<br> height: "50px",<br> bottom: "20px",<br> right: "20px",<br> background: "url(./assets/icon-submit.svg) no-repeat",<br> backgroundSize: "100% 100%;",<br> },<br> shover: { transform: "scale(1.2)" },<br> on: {<br> click() {<br> Spark.router.push("/submitCode");<br> },<br> },<br>});<br>
Tailwind 不用起名啊,这还不香?
有设计师就自己写 CSS
没有设计师就用 tailwind CSS
这种巨坑
说 Tailwind 不好维护的绷不住了,我想说 less scss 这种才不好维护好吗,特别是 2C 项目,命名、写法、嵌套,后续迭代,真的爆炸
我觉得 tailwind 不用想类名对我太友好了
sass + react-jss + antd 还行
之前跟一个社区的项目提 PR 的时候发现 antd 的一个 theme 会在每次使用 useTheme 时候浅拷贝,这个还算正常操作,但是调试的时候看了一眼这个对象里面有接近 8000 个属性🤣。devtools 看了一下耗时,有大约 30%时间在复制这个对象,我当时就纳闷为什么要塞这么多东西进去。我觉得 tailwind 的问题在于 css 语义话被干掉了,在 class 太多之后调试的时候复杂度有点增大,我也是业余项目用也没有体验出什么特别大的缺点。
#38 是啊,大部分说的都有不同程度混淆概念和维度,
- styled-components 是「定义组件的方式」、是语义化拆分组件的写法形式
- Sass / Less / tailwind (包括 classname 和 ) 都是「编译生成 CSS 的方式」,只是提供的语法不同
- import *.css (包括 module.css) 和 css...
(及其各种语法糖) 是工程化打包后「注入 CSS 的不同方式」
这三个维度是可以互相组合、也可以单独用其一的,
比如你可以
- 在 styled-components 写法中,直接写 tailwind class 然后编译生成 CSS 被自动注入(或者 no-inject 手动注入)
- 在 styled-components 写法中,直接写 less 的同时在里面写 tailwind class 然后编译后注入
- 直接写 [.module].(less|sass|css) 文件,import 后写到组件 classname 上,当然同样的,样式文件里可以写 less/sass/css/tailwind 语法(指各类 at-rules)
这里的编译器都是 postcss + 各种东西
至于直接写 style={{…}} 的,那是真的 js 写 inline-style 不在以上 CSS 范畴内
最后研究了一圈,还是觉得用 module sass 比较符合自己的习惯。
还是有 CSS module
在2024年,React项目中使用CSS并结合Node.js的最佳实践通常涉及CSS模块化、CSS-in-JS库(如styled-components或emotion)或CSS预处理器(如Sass),以及构建工具(如Webpack或Vite)的集成。这里介绍一种使用styled-components
和Vite的示例,因为它们在React项目中非常流行且易于设置。
使用 styled-components
和 Vite
-
安装依赖: 首先,确保你已经安装了Node.js和npm(或yarn)。然后,初始化一个新的React项目并安装
styled-components
和Vite相关依赖:npx create-react-app my-app cd my-app npm install --save styled-components npm install --save-dev vite [@vitejs](/user/vitejs)/plugin-react
注意:实际上,Vite通常需要从项目创建阶段就集成,这里为了简化说明,假设你已经有一个React项目。
-
配置Vite(如果尚未配置): 在项目根目录创建
vite.config.js
,配置React插件。import { defineConfig } from 'vite'; import react from '[@vitejs](/user/vitejs)/plugin-react'; export default defineConfig({ plugins: [react()] });
-
使用
styled-components
:import styled from 'styled-components'; const Button = styled.button` background-color: blue; color: white; padding: 10px 20px; border: none; border-radius: 5px; `; function App() { return <Button>Click Me</Button>; } export default App;
这种方法结合了React的组件化思想和CSS的样式封装,同时利用Vite提供的快速开发体验。