前端为什么不加个#define 语句呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
3dwelcome
V2EX    前端开发

前端为什么不加个#define 语句呢?

  •  
  •   3dwelcome 2021-04-27 13:42:04 +08:00 2967 次点击
    这是一个创建于 1707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学 tailwindcss, 里面有个叫 bg-blue-600 的颜色定义,实际编译进 class 的代码,是 background-color: rgb(37, 99, 235);

    可是用 chrome 调试页面的时候,光看 background-color: rgb(37, 99, 235), 怎么也没办法和 bg-blue-600 去关联起来。那为什么不直接在代码里,加一个#define 语句?

    比如把

    <div lass="bg-blue-600"> 

    改成

    #define BG_BLUE_600 background-color: rgb(37, 99, 235) <div class="BG_BLUE_600"> 

    这样不是好理解多了?

    19 条回复    2021-04-27 21:40:08 +08:00
    wolfie
        2
    wolfie  
       2021-04-27 13:49:52 +08:00
    复用是不是还得统一管理
    3dwelcome
        3
    3dwelcome  
    OP
       2021-04-27 13:53:43 +08:00
    @kingwl #define 不仅仅是保存 CSS 变量,还可以应用在 HTML 或者 JS 或者 VUE 上,一切代码 /文字皆可定义成宏。

    宏内部还可以加表达式,加条件判断语句。

    我就是想不太通,那么多前端编译器,为什么没人用过,也没人提到宏编译。
    kingwl
        4
    kingwl  
       2021-04-27 13:55:07 +08:00
    3dwelcome
        5
    3dwelcome  
    OP
       2021-04-27 13:56:00 +08:00
    @wolfie 设计宏就是为了复用代码,深挖下去有很多可能性,不比模板编译差很多。

    可惜宏被所有人给遗忘了。
    shakaraka
        6
    shakaraka  
    PRO
       2021-04-27 14:01:51 +08:00
    你这不就是样式本身的使用方法么?

    #define BG_BLUE_600 background-color: rgb(37, 99, 235)

    不就是

    .BG_BLUE_600{ background-color: rgb(37, 99, 235) }

    有啥区别?
    woodensail
        7
    woodensail  
       2021-04-27 14:02:55 +08:00   1
    你好,这个功能是有的。webpack DefinePlugin 了解一下。

    当然你可能会说这个是编译时的不是运行时的。不过 c 语言的 define 也是编译时的。
    3dwelcome
        8
    3dwelcome  
    OP
       2021-04-27 14:06:53 +08:00
    @woodensail 果然还是有轮子,不太好找,但的确是宏编译。赞~
    Mithril
        9
    Mithril  
       2021-04-27 14:08:27 +08:00   1
    @3dwelcome 可以了解一下 SCSS,但这也不过是 CSS 的预编译方言。
    你可以认为 HTML,JS,TS 都是独立的系统,你在 C++里 Define 的在 Java 里也用不了。。。
    3dwelcome
        10
    3dwelcome  
    OP
       2021-04-27 14:10:00 +08:00
    @wunonglin 这就是传统 css class 和 inline css 的区别。

    偶尔写几句<div style='BG_BLUE_600'>这种 inline css, 但是既不希望污染全局 CSS (因为仅仅一小部分代码里用到),又希望不把 RGB 值给写死。
    yaphets666
        11
    yaphets666  
       2021-04-27 15:00:17 +08:00
    因为这种需求根本不存在。
    专职前端不会用这些样式库,或者说公司的商业项目极少用样式库。
    tailwind 这种东西以前叫原子类,其实是已经被淘汰的东西了。
    whileFalse
        12
    whileFalse  
       2021-04-27 15:16:08 +08:00
    你看现代编程语言有多少支持#define ?
    这个玩意儿容易产生 bug,而且影响 IDE 的实时检查。
    Jirajine
        13
    Jirajine  
       2021-04-27 15:37:14 +08:00
    css-in-js 定义个变量不就行了?
    rain0002009
        14
    rain0002009  
       2021-04-27 16:10:47 +08:00
    tailwind 开启 jit 模式 就有你说的功能了 你可以写 bg-[#fefefe]
    或者使用 windicss 也有相同的功能
    Mozshaw
        15
    Mozshaw  
       2021-04-27 19:28:48 +08:00
    关键词 css-in-js
    Mutoo
        16
    Mutoo  
       2021-04-27 19:35:49 +08:00
    @yaphets666 tailwindcss 2.0 是 2020 年 State of css 最火的框架了,现在不叫原子类了,改名叫 utilities-first 了
    参考: https://2020.stateofcss.com/en-US/technologies/css-frameworks/
    IvanLi127
        17
    IvanLi127  
       2021-04-27 20:07:46 +08:00 via Android
    你为啥要把这两个联系起来。。。想联系起来的话你看样式来源就好了啊。。。devtoots 又不是看不到
    wenzichel
        18
    wenzichel  
       2021-04-27 20:16:50 +08:00
    现在 CSS 已经有变量这个东西了,虽然没有像其他语言 define 那么高级!

    :root {
    --bg-blue-600: rgb(37, 99, 235); // 定义
    }
    . BG_BLUE_600 {
    background-color: var(--bg-blue-600); // 通过 var 获取值
    }
    3dwelcome
        19
    3dwelcome  
    OP
       2021-04-27 21:40:08 +08:00
    @IvanLi127 你没懂我的意思,现在 tailwindcss 这种框架,已经完全把 HTML 原本的 CSS 改造成了另外一种全新的语言。

    原则上本来语义全部用专用缩写替代,能不用原生 CSS,就必然不去用。

    这样的话,相当于把所有的 CSS 关键词都 redefine 了一次。这和预编译宏作用,有点殊途同归的感觉。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3475 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 04:28 PVG 12:28 LAX 20:28 JFK 23:28
    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