本人刚写前端没多久,没学过 style 直接用的 taildcss 之前写过安卓,习惯用 3 方式,tailwind 无法实现才用 4 。但是公司内其他的老前端都喜欢用 2 ,又有些人喜欢用 4 ,我不是很理解,样式分出来了要改的时候非常麻烦啊,找样式找不到得用代码得开两个页面去找,配合显示页面的地方要看 3 个地方。大家有啥宝贵的经验可以分享分享
1
daliusu 2023-07-04 09:51:39 +08:00 1
css-in-js 保平安,再也没有了这么多问题
|
2
shuxhan 2023-07-04 09:56:31 +08:00
3.4 更适合统一化的 ui 吧,像我们公司,网页都是定制化的,用原子化基本满足不了,一个项目能拆几十个 css 文件,基本都是千行往上
|
3
LandCruiser 2023-07-04 09:56:58 +08:00 2
1:tailwind 不适用于所有场景。
2:你会 tailwind 不代表别人会 tailwind ,增加了学习成本但收益不大,不解决痛点难点。但是大家都会 CSS 。 3:CSS 原子类这种写法在远古时代就有了,但没有大规模流行开来,只是部分应用。 |
4
NoManPlay 2023-07-04 10:04:34 +08:00 2
目前用 React +scss+CSS Modules
1.将 scss 文件作为 styles 变量引入 import styles from "xxx.module.scss" 2.然后在 react 中作为 className 使用 className={styles.xxx} 这样会在编译后自动为 className 加上混淆,防止了样式污染 |
5
Leviathann 2023-07-04 10:08:10 +08:00
原来是 2
后来写了一个新的小项目体验了 tailwind ,被我强行写了一堆仿 tailwind 的原子类模拟成 3 没什么学习成本,收益很大,大多数常见的样式都能复用 |
6
CHTuring 2023-07-04 10:09:24 +08:00
|
7
ztc 2023-07-04 10:21:49 +08:00
相比 tailwind, 我觉得 Unocss 更好用, 可以这样写
```html <div border="t-3 solid rounded-lg" p="x-6 y-4" bg="white dark:gray-800" hover="scale-105 cursor-pointer" shadow-2xl relative max-w-xl transition /> ``` 个人感觉比在 style 里写样式,效率是要更高的,而且看起来很清晰 |
8
tool2d 2023-07-04 10:46:44 +08:00
我就是全写在 style 里面,但是因为 style 的原生语法又臭又长,我自己写了一个缩写转换。
举个例子,我会这样写<div css="flex my-10 mx-auto w-full h-full">,解析 dom 时,会动态展开 w-full 为 weight:100%, flex 为 display:flex; |
9
fox2081 2023-07-04 10:53:01 +08:00
tailwind 有啥学习成本
|
11
zhonj OP @CHTuring 确实是简单,我新手 5 分钟就上手原子类 css , 1 天基本就熟了。对新手确实是友好的比 style 简单很多,但是坏处是碰到复杂的样式还是得学习 style
|
12
zhonj OP @shuxhan 你们拆了 10 几个 css 文件,如果要修改,找起来不头大么?先看页面定位,然后看 html ,再看 css 。我们公司同事用 4 写的,我改起来人都是麻的
|
15
zhonj OP 感谢大家的回复,这么看下来前端是真的杂啊。各种各样的方式方法,目前还是没找到写样式最舒服的方式😪
|
17
Perry 2023-07-04 11:14:01 +08:00 via iPhone
公司有比较好的 design system 的,估计一句 style 都不用写(除了设计师想出来的一些更复杂应用场景比较特殊的 components ),直接用现成的 react components 。
|
22
crysislinux 2023-07-04 11:23:30 +08:00 via Android
tailwind 自己写还好。改别人写的就大大的不好了。
|
23
Hanser002 2023-07-04 11:25:49 +08:00
tailwindcss + emotion
|
24
leonfong 2023-07-04 11:27:45 +08:00
自己写项目 偏向 3 ,团队协作用 4 ,感觉 4 就是兼具了整合了 23
|
25
justyeh 2023-07-04 13:32:40 +08:00
之前一个同事用了 tailwindcss ,UI 设计的花哨点,样式代码比标签长
我去改样式,p-8 、f12 都是什么鬼,还要一个个的去看 没有成熟的设计规范,tailwindcss 请自己玩玩就好 |
26
dfkjgklfdjg 2023-07-04 13:36:32 +08:00 1
觉得 tailwindcss 会造成 className 过长的可以试试看 [DaisyUI]( https://daisyui.com/) 这种 UI 库,会清爽很多。
|
27
justyeh 2023-07-04 13:38:22 +08:00
我不理解用 taildcss 是赶时髦还是怎么的,这种代码真的好吗?
``` <div v-for="(group, idx) in schema" :key="idx" class="min-h-[70px] relative" > <div :class="setOuterClass(idx)" @click="() => { active = idx }"> <div :class="setInnerClass(idx)"> <div>{{ idx + 1 }}</div> </div> </div> <div class="absolute text-[12px] left-[50%] top-[32px] min-w-[70px] translate-x-[-35px] text-center" :style="{ color: active >= idx ? '#3F7AFF' : '#CBCBCB'}">{{ group.label }}</div> </div> ``` |
28
justyeh 2023-07-04 13:41:36 +08:00
```js
// 头部导航栏样式 setInnerClass(idx) { const isBefore = idx < this.active const isCurrent = idx === this.active const isAfter = idx > this.active const beforeClassInner = 'min-w-[22px] max-w-[22px] w-[22px] h-[22px] bg-[#ffffff] text-[#3F7AFF] text-center text-[12px] font-semibold leading-[18px] rounded-full border-[2px] border-[#C8D7F9]' const currentClassInner = 'min-w-[22px] max-w-[22px] w-[22px] h-[22px] bg-[#3F7AFF] text-[#fff] text-center text-[12px] font-semibold leading-[18px] rounded-full border-[2px] border-[#124FDA]' const afterClassInner = 'min-w-[22px] max-w-[22px] w-[22px] h-[22px] bg-[#ECECEC] text-[#CBCBCB] text-center text-[12px] font-semibold leading-[18px] rounded-full border-[2px] border-[#ECECEC]' return (isBefore && beforeClassInner) || (isCurrent && currentClassInner) || (isAfter && afterClassInner) }, setOuterClass(idx) { const isBefore = idx < this.active const isCurrent = idx === this.active const isAfter = idx > this.active const beforeClassWarp = 'z-[2] max-w-[26px] relative rounded-full border-[2px] border-[#C8D7F9]' const currentClassWarp = 'z-[2] max-w-[26px] relative rounded-full border-[2px] border-[#C8D7F9]' const afterClassWarp = 'z-[2] max-w-[26px] relative rounded-full border-[2px] border-[#ECECEC] custom-linear-box-shadow' return (isBefore && beforeClassWarp) || (isCurrent && currentClassWarp) || (isAfter && afterClassWarp) }, ``` |
29
SolidZORO 2023-07-04 13:43:02 +08:00 via iPhone
@NoManPlay 同意这点,css modules 就很好了。
我个人只用 css modules ,当然是在 less/sass 里面用。 这样任何人看了也不会有学习成本,鼠标点击 styles.xxx 还能直达样式。 原生 css 没有任何 dsl 和语法糖还是非常好的,喜欢写原生 css 。 用 bs/tw 的这部分群体我很久之前就观察过了,就是不会 css ,或者觉得 css 难写不好 css 的用户是主要群体。当然不排除一部分 css ,大佬也爱用。 css-in-js 是我最不待见的,每家为了实现原生 css 的一些 fn ,用尽了各种 dsl 和语法糖,导致学习成本很高而且还跑在 runtime ,对性能有影响,最近新出号称下一代 zero runtime 的 panda 用起来其实也很别扭。 当然 CIJ 并不少一无是处,在我看来最大的好处就是可以做到 css 和 js 可以复用变量,也就是 css vars 直接写成 const 。以及可以做 scope 隔离,一个 app 可以做多个 scope 的多套 theme ,这些点都挺好的,除此之外我没感觉到其他优势。 |
30
SniperXu 2023-07-04 13:45:12 +08:00
试试 unocss ?最近用的离不开了
|
31
R1hu6Hs2sSN8pkVX 2023-07-04 14:15:26 +08:00
@CHTuring 收益大哪了,那一长串的 class 写完之后大家都不写 bem 类名了恶心死了
|
32
R1hu6Hs2sSN8pkVX 2023-07-04 14:19:03 +08:00 1
@CHTuring 还有美其名曰什么可以大幅压缩 css 的大小其实是偷换概念你的包大小全放在 js 的类名中了
|
33
zhonj OP @whatFoxSay #31 class 丢一个类名当你要维护的时候你得开三个页面,一个浏览器定位,一个 html 定位节点,一个 style 定位样式,找起来没有使用 windcss 或者 unocss 方便,而且 bem 类名这玩意取名字真是很佛系的,一个团队 10 个人有 10 种取名方式。
|
34
justyeh 2023-07-04 14:35:24 +08:00
|
35
wdking 2023-07-04 14:40:26 +08:00
啥都用过 总结:windicss
|
36
zhouyg 2023-07-04 14:41:49 +08:00
总之,最后是 tailwind
|
37
CHTuring 2023-07-04 15:15:42 +08:00
@whatFoxSay 你说的对,不过有个东西叫 apply
|
38
CHTuring 2023-07-04 15:16:21 +08:00
@whatFoxSay 你说的对,但不是只有 css in js ,还有 .css
|
40
murmur 2023-07-04 15:33:00 +08:00
less 、class 自己写,都是直接封装成组件
|
41
sadyx 2023-07-04 16:00:13 +08:00
2
|
42
magewu1223ll 2023-07-04 16:39:52 +08:00
react cssModule
|
43
karott7 2023-07-04 17:03:09 +08:00
直接用 tailwindcss 就好,公司项目永远都会和 tailwindcss 的默认定义有区别,可以和 UI 商量然后自己自定义样式配置,或者直接用 p-[100px] 这样的自定义值(个人会直接用这种方式,公司项目要的是出活快)。
我不在乎 css 样式文件大小或者其他什么优势,主要就是写起来快,顾名思义,不用切换文件,不用思考类名 |
44
snarkprayer 2023-07-04 17:05:01 +08:00
3
4 这种情况多数都封装进组件了 |
45
IvanLi127 2023-07-04 18:19:31 +08:00 via Android
|
46
zhonj OP @justyeh #34 蓝湖这种自动生成 copy 一时爽,换个人来看来改就是火葬场。我们公司之前人写的 uniapp 小程序代码就是蓝湖 copy 的,我看的头皮发麻,太难改了,而且 uniapp 用微信开发者工具本来就卡,我 i9 都没用,后面直接一口气全部重写掉了
|
47
zhonj OP @SolidZORO 大佬问下哈 styles.xxx 你们是如何取名字的啊,而且 css 和页面分开了不觉得改起来麻烦么。我就是感觉 class="xxx" 然后.xxx{} 这样取名字太麻烦了,加上我写过安卓 ios flutter 都是类似 unocss 的方式,我的理解可能是 html 和 css 理应在一起而不应分开了增加维护成本。刚写前端不久的小白的想法😁
|
49
maxssy 2023-07-04 20:33:25 +08:00
antd 默认样式 + 全写 style, 之前也试过 less 和 css-in-js, 但是大多是内部项目也就无所谓了
|
50
SolidZORO 2023-07-04 21:39:34 +08:00 via iPhone
|
51
Pastsong 2023-07-04 21:50:03 +08:00
我 React 通常是写 scss + css module ,但我累了不想起类名的时候就去写 styled-component
|
52
anguiao 2023-07-04 22:14:44 +08:00
Tailwind 确实很容易把 class 写得很长。但是写多了之后就会意识到,一些样式是不需要显式指定的,默认值就可以满足需求。
善于利用默认值,可以少些很多不必要的样式。就算有时候不用 Tailwind 了,我也发觉到自己以前写了很多不必要的代码。 |
53
Danswerme 2023-07-04 22:37:00 +08:00
@SolidZORO 请教一下,鼠标点击 styles.xxx 直达样式你用的是哪个插件呢? 我在 VSCode 里用了插件之后点击 styles.xxx 虽然可以正常跳转到 scss 文件里,但是不能正确定位到对应类名。
|
54
SolidZORO 2023-07-04 23:50:47 +08:00
@Danswerme 我不常用 VSC ,用的是 IDEA ,装了这个 https://plugins.jetbrains.com/plugin/9275-react-css-modules 我觉得只要是个 css modules 插件都能做到这件事情吧?
|
55
vaaagle 2023-07-05 09:00:58 +08:00
前端需要纠结的,过阵子你会发现它并不在这里面。除非有要求,哪个对当前项目方便就怎么来,但是最好统一
|
56
zdw189803631 2023-07-05 09:23:14 +08:00
tailwindcss + style
|
57
weixiangzhe 2023-07-05 09:49:07 +08:00
布局用 unocss/tailwindcss , 其他的写 class ,其他的大都是有 ui 老师传设计稿到 蓝湖 figma 之类的,直接 copy 就好了,写 tailwindcss 更累了
|
58
zhonj OP @weixiangzhe 混着来,写是块了,但是改起来就头疼了
|
59
weixiangzhe 2023-07-05 10:37:20 +08:00
@zhonj 所以我是限制自己都是布局时用用
|
60
justyeh 2023-07-05 15:14:32 +08:00
@zhonj 不是无脑 copy ,会选择性的删除一些用不到的属性,经常用到的是 fontSzie 、color 、border 、background ,真的很方便
|
61
vlgs 2023-07-08 19:00:05 +08:00
公司用 styled component 。自己使用 tailwindcss ,推荐一个库 https://ui.shadcn.com/ 可以理解一下 tailwind radix 怎么制作 headless component 。
|