[问题交流] 常见的 CSS 方案选择 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
anc95
V2EX    CSS

[问题交流] 常见的 CSS 方案选择

  •  
  •   anc95
    anc95 2022-01-18 14:33:20 +08:00 5003 次点击
    这是一个创建于 1414 天前的主题,其中的信息可能已经有所发展或是发生改变。

    常见 CSS 方案简单总结

    原生 CSS

    优点:

    1. 简单

    Less / Sass 等 CSS 预编语言

    优点:

    1. CSS 基础上增强函数、theme 等特点(不过 css variable 也支持 theme )
    2. 编译可以做一些 treeshaking 的优化,体积相对 CSS 会更优一些

    CSS/Less Module

    这是一种 CSS In CSS 的方案

    优点:

    1. 能解决样式冲突的问题

    缺点:

    1. 相对应的缺点是样式不能自由覆写

    CSS In JS

    styld-componentsemotion css 为代表的一些方案

    优点:

    1. 相比 CSS Module 而言,样式可在 JS 层灵活控制(如根据 JS 状态切换不同的样式,CSS Module 包括其它方案需要在 clssName 层控制)

    缺点:

    1. 相对应的缺点是样式不能自由覆写
    2. 会写很多的冗余代码,样式不太好做复用?

    Utility CSS

    以 tailwind css 和 windcss 为代码的一些 CSS 方案。

    问题

    目前在考虑我的项目代码怎么写,感觉很难 all in 到其中一种方案里

    咨询下贵站的大佬们平时都倾向于使用哪种或哪几种组合方案,及其原因

    24 条回复    2022-01-18 23:08:00 +08:00
    daysv
        1
    daysv  
       2022-01-18 14:38:25 +08:00
    tailwind css 足矣
    koor
        2
    koor  
       2022-01-18 14:41:24 +08:00
    rebass 搭配 styled-components
    weixiangzhe
        3
    weixiangzhe  
       2022-01-18 14:41:31 +08:00
    我还在用 CSS Module 配合 less, 主要是简单够用
    zcf0508
        4
    zcf0508  
       2022-01-18 14:42:41 +08:00
    在用 windicss ,主要是样式写起来很爽,不用跳去单独写 css
    heyjei
        5
    heyjei  
       2022-01-18 14:44:03 +08:00
    现在流行 tailwind 了吗?看来要去学习了
    ddiu8081
        6
    ddiu8081  
       2022-01-18 14:47:16 +08:00
    tailwind css ,能节省大量时间在起 class 名上
    shyling
        7
    shyling  
       2022-01-18 15:13:28 +08:00   1
    TomatoYuyuko
        8
    TomatoYuyuko  
       2022-01-18 15:16:56 +08:00
    用过 tailwind css 但不太喜欢,个人比较沉迷手撸 sass 的快感
    shyling
        9
    shyling  
       2022-01-18 15:17:46 +08:00
    个人的感觉是 css module 不太喜欢,为了解决冲突带来的麻烦有点多,而且也解决不了命名难的问题。

    css in js 就更麻烦了, 首先改 className 问题也不大,style={{ backgroundColor: a ? 'red': 'blue' }} 好像也没啥问题
    newbieRenew
        10
    newbieRenew  
       2022-01-18 15:19:56 +08:00 via iPhone
    借助 Sass 纯手工打造。那个 tailwind 的用法简直是灾难,特别是官网的例子,完全弄成标记语言了,看似复用,其实完全背离了模块化的理念,耦合太多,一旦需要改变某个数值,改起来简直是灾难。
    p8YFk4f3E8SJ3aEv
        11
    p8YFk4f3E8SJ3aEv  
       2022-01-18 15:32:44 +08:00
    @TomatoYuyuko +1 ,我都是手撸的
    p8YFk4f3E8SJ3aEv
        12
    p8YFk4f3E8SJ3aEv  
       2022-01-18 15:33:30 +08:00
    主要是担心用别的会样式冲突
    newbieRenew
        13
    newbieRenew  
       2022-01-18 15:37:23 +08:00 via iPhone
    tailwind 的糟点用一个例子来形容: 某个边栏,你命名为“nav-left”并置于左边。一天,需求变更为放在右边,为了让其他人看明白,你是可能会更改名字为“nav-right”并置于右边。当变更频繁、没有模块化时,你更改的地方可能会很多了。其实你可以更好的命名为“nav-side”,从样式表里来控制它的方位,无需更改页面布局。
    XCFOX
        14
    XCFOX  
       2022-01-18 16:59:18 +08:00
    小孩才做选择,大人 CSS In JS 、Utility CSS 全都要

    https://fower.vercel.app/zh-cn/
    https://xstyled.dev/
    vanton
        15
    vanton  
       2022-01-18 17:20:40 +08:00
    tailwind 使用起来就是灾难。

    一旦有大量需要修改类似组件的需求,工作量远超过手写 css
    yaphets666
        16
    yaphets666  
       2022-01-18 17:50:44 +08:00
    专业的前端,做前端工程,只有一个选择,就是 scss
    fortunezhang
        17
    fortunezhang  
       2022-01-18 20:31:50 +08:00
    个人现在只用 scss 。妥妥的生产力
    Cbdy
        18
    Cbdy  
       2022-01-18 20:55:32 +08:00
    分享一下我的实践的感想,你说的我基本都稍微用过,实际实践下来的话

    CSS Modules ,公司项目,有一些用 CSS Modules 的,但个人项目已经不用了,以前用的也改造掉了

    用 Emotion 写的石头剪刀布小游戏
    https://github.com/alchemy-works/RPS

    用 styled-components 写的五子棋小游戏
    https://github.com/alchemy-works/gomoku

    用 Tailwind CSS 写的 Todo List
    https://github.com/alchemy-works/todo-list

    实际是这么几种方案:

    - CSS Modules (包括 Vue 的 SFC 中的 Scoped CSS ):依赖编译工具链,和原有写 CSS 体验最接近,单独的 CSS 文件
    - CSS in JS ( styled-components 、Emotion 、styled-jsx 等):可以脱离编译工具链,更加灵活,和 JS 相性好
    - CSS 原子类( Tailwind CSS 等):正经使用要编译工具链,使用成本有点大
    - 行内 CSS:这个局限性太大了,在很少场景作为补充使用

    我个人更倾向于 styled-components/emotion 这种 CSS in JS 的方案

    快速写静态的小页面我可能会用 Tailwind CSS 一把梭
    MiMiGe
        19
    MiMiGe  
       2022-01-18 20:56:59 +08:00
    tailwind
    doommm
        20
    doommm  
       2022-01-18 21:23:09 +08:00
    推荐试试 tailwindcss 。我是用它结合传统的 scss ,配合 vue/react 的组件化使用
    shintendo
        21
    shintendo  
       2022-01-18 21:28:52 +08:00
    css modules + tailwind
    shintendo
        22
    shintendo  
       2022-01-18 21:39:12 +08:00   1
    记得以前比较抗拒 tailwind 是觉得它跟行内 style 差不多,把样式耦合在了 html 上面。后来有一篇文章把我说服了,大意是说把样式与 html 解耦是一个幻想,大部分脱离于 html 单独写的 css ,其实都在 css 里又维护了一份 html 结构。
    chenliangngng
        23
    chenliangngng  
       2022-01-18 22:31:32 +08:00
    说说我的实践,react 技术栈

    less ,用不用无所谓,曾经的优点在现代的 css 和各种已封装组件库面前,聊胜于无
    css module ,长期在使用,没有特别大的缺点,改 class 名字可能不如 vue 的 scoped 加 data-
    styld-components ,用过半年,我个人觉得很扯淡的技术方案,方便单元测试倒是可以,但是背离关注点分离原则,js 和 css 混在一起,久而久之让 js 代码稀烂
    tailwind css ,用过 3 个月,后面全删了重写。原因是学了 css 再学另一套 class 有点没必要,每次要过 2 遍脑袋,其实并不直观,而且必要的时候还是要自己写 style 和 class

    推荐 less+css module ,不要再带别的了
    AV1
        24
    AV1  
       2022-01-18 23:08:00 +08:00 via Android
    我选 less/sass 。
    如果你有信心应对“五彩斑斓的黑”,tailwind 也不是不行。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4048 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:11 PVG 08:11 LAX 16:11 JFK 19:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86