什么是 vscode-tailwind-magic
- 是一个解决
TailwindCss
写法上痛点的vscode
插件
为什么要写 vscode-tailwind-magic❓
- 为了对齐
UnoCSS
的生态,UnoCSS
有transformer-variant-group
、transformer-attributify
, 然而TailwindCss
就没有这种优势
vscode-tailwind-magic 的优点 💯
它能让你在属性上写
tailwind
的语法, 它能带保留语意化
: 因为UnoCSS
的这些 vite-plugin 带来的简写方式, 会丢失一部分开发者直观解读出属性的意义, 因为项目很多情况下是协同开发, 你自定义一个variant
, 我来一个shortcuts
, 你请假了, 我来读你的shortcuts
, 我会很懵逼, 这是啥, 我要借助Unocss
的 vscode 插件 hover 才能知道转换后的 css 结果, 这里已经做了一次额外的事情了, 它带来了不直观, 所以我在设计上是想保留原本 tailwind 的语法, 因为这是规范, 即使今天有一个新人来, 它学习参考的是 tailwind 的官网, 而不是你个人二次定制化的东西, 它会带来更大的学习成本它比
Unocss
更加简化, 是一个UnoCSS
写法上的超级, 因为UnoCSS
的vite-plugin
, 是没有引入 parser 的, 所以它能力有局限, 没办法带来更加精准的控制, 它的属性模式支持能力也是有限的, 而vscode-tailwind-magic
能打破传统parser
的限制, 突破jsx
的束缚, 即使在jsx
语法层面的爆红, 你在插件的能力下仍然能支持转换, 你在UnoCSS
没办法做到<div bg-#fff/>
, 你只能这样写<div class="bg-#fff">
或者<div bg="[#fff]">
但是vscode-tailwind-magic
则可以这样写<div bg#fff/>
, 因为它会被转换成<div class="bg-[#fff]"/>
由于
UnoCSS
和TailwindCSS
出于原子化考虑复用性的最大化, 属性拆分细粒度很小, 不能做到特别好的开发体验优化, 举一个例子, 我写了flex-col
, 难倒它会脱离flex
存在吗? 你必须要flex flex-col
, 它才能生效, 更有border-#eee
, 你是看不到 border 的样式的, 为什么呢? 因为你需要配置border
的宽度
, 配置是否是solid
或者dash
等等的东西, 才能看到你以为的边框, 为什么不直接给个默认的solid
和1
像素的边框呢 ? 这也就是我说的出于最大化复用的一个痛点, 而vscode-tailwind-magic
能弥补这一点, 因为我是站在开发者的角度去设计它的, 所以我希望, 我如果给到更加细节的一个属性的时候,能自动带出它相关联的必要属性, 就是前面举的那些例子说的情况还有更多, 虽然这些配置是出于我个人主观的默认设置,你可能觉得, 这不是相当于你个人的shortcuts
了吗? 并不是这样子的,因为它也可以是你个人的shortcuts
, 它是支持每个人配置自己的规则, 唯一不同的是无论你个人怎么配置,但是所有人最终都遵循了Tailwind
官网的规范,保留了语意化, 而不是个人定制化的东西, 举一个例子,你可以配置tc
你个人感觉的shortcuts
, 但是最终,被所有开发者看到的是你写了class="text-center"
这里顺便说一下,有的人很不喜欢
attributify
模式, 虽然它的写法简单,不局限于我一定要写在class
或className
中,很自由,但是UnoCSS
的属性模式并没有强大的到支持所有的写法,所以,对于特殊情况,你仍然要写class
, 所以就出现了大批class
和attributify
混用的情况,会更加不直观的维护,因为属性会有的在前面有的在后面,中间可能夹杂了其他组件的传递属性,就比如<my-comp w-10px comp-prop="xxx" h-10 class="bg-#eee" text-center />
,但是vscode-tailwind-magic
它满足了任意位置用属性的方式写,但是最终会转换成对应的class
或className
, 它会变成<my-comp comp-prop="xxx" class="w-[10px] h-10 text-center bg-[#eee]" />
演示 Gif

你可以通过它的测试文件 📃,看到它的写法和能做到的事情~