twin.macro:在 CSS-in-JS 里写 Tailwind 的小工具

twin.macro:Twin‍:male_sign_selector: Twin在构建时将Tailwind的魔力与css-in-js的灵活性(情感,样式化组件和goober)融合在一起 Twin将Tailwind的魔力与CSS-in-js的灵活性融为一体 使用Twin的tw属性将Tailwind类添加到jsx元素上: import 'twin.macro' const Input = ( ) => < input tw = "border hover:border-black" / > 将Nest Twin的tw导入到CSS道具中以添加条件样式: import tw from 'twin.macro' const Input = ( { hasHover } ) => ( < input css = { [ tw `border` , hasHover && tw `hover:border-black` ] } / > ) 或将sass样式与css导入混合使用: import tw , { css } from 'twin.macro' const hoverStyles = css ` & : hover { border-color : black; ${ tw `text-black` } } ` const Inpu 立即下载

twin.macro:在 CSS-in-JS 里写 Tailwind 的小工具

twin.macro 在 GitHub 上拿到了 8,029 Star。

它做的事情很直接:把 Tailwind 的原子类搬进 CSS-in-JS 体系。你可以在 jsx 元素上加 tw 属性写 Tailwind 类名,Babel 在编译期把这些类名翻译成 CSS 对象,再交给 styled-components 或 emotion 处理。运行时没有任何额外代码。

正文顶部截图

1、 解决什么问题

Tailwind 和 CSS-in-JS 长期是两条路线。Tailwind 写得快、约束统一,但遇到条件样式、组件复用、动态主题时容易写丑;styled-components 和 emotion 灵活,可 class 名一长串,维护成本不低。

twin.macro 把两者焊接在一起。类名用 Tailwind 的写法,组合和条件逻辑用 CSS-in-JS 的能力。编译期处理掉 Tailwind 类,输出干净的 CSS 对象,运行时没有 Tailwind 的样式表,也没有 JS 运行库负担。

README区域截图

2、 怎么用

最简的用法,import 一下,给元素加 tw 属性:

import 'twin.macro'

const Input = () => <input tw="border hover:border-black" />

需要条件样式,用 css prop 配合 tw:

import tw from 'twin.macro'

const Input = ({ hasHover }) => (
  <input css={[tw`border`, hasHover && tw`hover:border-black`]} />
)

要建组件也行,tw 可以构造带样式的组件,还能在已有组件上叠加样式:

import tw from 'twin.macro'

const Input = tw.input`border hover:border-black`
const PurpleInput = tw(Input)`border-purple-500`

复杂场景切到 styled import,写函数式 props 到样式的映射,和 emotion 的 API 保持一致。

3、 几个值得一提的特性

变体分组。Tailwind 写响应式或伪类时类名会膨胀,twin 支持括号分组:

<div tw="sm:(w-4 mt-3) lg:(w-8 mt-6)" />
<div tw="hover:(text-black underline) focus:(text-blue-500 underline)" />

嵌套也可以,sm:(bg-black hover:(bg-white w-10)) 这种写法合法。

编译期转换。Babel 跑一遍,tw 调用被替换成 CSS 对象,没有运行时解析。打包体积上不会因为用了 Tailwind 类而带一份 JS 运行库:

tw`text-sm md:text-lg`
// ↓ ↓ ↓ ↓ ↓ ↓
{
  fontSize: '0.875rem',
  '@media (min-width: 768px)': {
    fontSize: '1.125rem',
  },
}

Tailwind 配置自动补全。类名打错了会提示,列出配置里接近的候选:

✕ ml-1.25 was not found
Try one of these classes:
- ml-1.5 > 0.375rem
- ml-1 > 0.25rem
- ml-10 > 2.5rem

VSCode 的 Tailwind 官方插件也能直接对接,写 tw 时有自动补全。

theme import。Tailwind config 里的值能在 JS 里直接取:themecolors.purple.500``,方便写在非样式场景里。

!important 简写。类名末尾或开头加 ! 就转成 important:<div tw="hidden!" /> 等价于 display: none !important。多个类一起 important 用括号包:(hidden ml-auto)!。

4、 适合谁

适合已经在用 styled-components 或 emotion,又想用 Tailwind 类名写样式的团队。也适合从 Tailwind 起步、但项目需要 CSS-in-js 的运行时能力(条件样式、props 驱动、动态主题)的开发者。

官方维护了一份配套示例仓库,覆盖 Vite、Next.js、Webpack、Parcel、CRA、Gatsby、Blitz、Storybook 等主流组合,每种栈都有 styled-components 和 emotion 两个分支的 TypeScript 版本。上手基本是 clone 一个示例改,不用自己捣腾 Babel 配置。

5、 注意点

它是 Babel macro,依赖编译期处理。用 Vite、Webpack 这类支持 Babel 的构建链路最顺。CRA 已经内置 macro 支持。如果用 SWC 走纯 Rust 转译链路,需要额外的 babel-plugin-twin 插件才能用 tw 和 css 属性而不写 import。

styled-components 和 emotion 的运行时仍然在,twin 解决的是写法问题,不是替换 CSS-in-JS 的运行时机制。期待它能让运行时样式完全消失的开发者要注意这点。

项目作者提到了它的源头是 babel-plugin-tailwind-components,那段工作由 Brad Cornes 完成,twin.macro 在此基础上做了一层 macro 包装和 API 整理。

它的源头是 babel-plugin-tailwind-components,那段工作由 Brad Cornes 完成,twin.macro 在此基础上做了一层 macro 包装和 API 整理。

twin-macro-page:使用样式化组件,Tailwind CSS和Twin.Macro构建的简单登录页面 Create React App入门 该项目是通过引导的。 可用脚本 在项目目录中,可以运行: yarn start 在开发模式下运行应用程序。 打开在浏览器中查看它。 如果您进行编辑,则页面将重新加载。 您还将在控制台中看到任何棉绒错误。 yarn test 在交互式监视模式下启动测试运行器。 有关更多信息,请参见关于的部分。 yarn build 构建生产到应用程序build文件夹。 它在生产模式下正确捆绑了React,并优化了构建以获得最佳性能。 生成被最小化,并且文件名包括哈希值。 您的应用已准备好进行部署! 有关更多信息,请参见关于的部分。 yarn eject 注意:这是单向操作。 eject ,您将无法返回! 如果您对构建工具和配置选择不满意,则可以随时eject 。 此命令将从您的项目中删除单个生成依赖项。 相反,它将所有配置文件和传递依赖项(webpac 立即下载

相关推荐

nextjs-tailwind-storybook-starter:Nextjs,Tailwind CSS,带有Twin.Macro的Storybook入门模板

Nextjs,Tailwind CSS,Storybook入门模板 使用以下技术的Storybook入门模板: Nextjs, Tailwind CSS, 故事书 样式化的组件 双宏 简要概述了以下安装,请在线参考官方文档。 配置Storybook有时并不那么容易,并且需要一些蛮力,请在其官方文档站点和GitHub上查看最新问题。 故事书主题已经过定制,以展示其品牌化方式。 安装Nextjs-空项目 npm react react-dom next 将以下内容添加到package.json脚本中 " dev " : " next dev " , " build " : " next build " , " start " : " next start " , 安装故事书 尝试这两个命令,如果您想要一个空的设置,则可以省略第一个 由于破坏了依赖关系,不得不使

1. 适合所有人的多汁 Tailwindcss 工具

Tailblock是预先设计的 UI 元素块,使用框架的实用程序类设置样式,可以轻松放入项目中以节省时间并减少对自定义 CSS 的需求。Tailwind 工具箱也是预构建的、可自定义的模板和组件的集合,可用作新项目的起点。Tailwindcss Brand Colors是 Tailwind CSS 框架的插件,可让您轻松地将流行品牌调色板中的颜色添加到您的项目中。我们下一篇文章再见😊。Transform是一种工具,允许用户将 CSS 样式转换为实用类,以便与 Tailwind CSS 框架一起使用。

我的博客,不一样的自我表达 389

Gatsby-Starter-Typescript-TwinMacro:配置了Typescript,twin.macro(TailwindCSS v2),PostCSS和React Helmet的Gatsby启动器

盖茨比的hello-world启动程序(包括TypeScript / twin.macro / PostCSS / React Helmet) 用这个hello-world样板启动您的项目。 该入门工具随附主要的Gatsby配置文件,您可能需要使用React的快速应用生成器快速启动并运行。

安装 twin.macro,页面报错Uncaught TypeError: Unable to determine current node version

Uncaught TypeError: Unable to determine current node version

Youxingfang的博客 777

AXI4协议之AXI4-Lite接口详解及实战

本文首先对AXI4总线协议进行了一个简单的介绍,然后使用vivado提供的模板创建了一个AXI4-Lite Master的接口,并生成了一个具有Master和Slave的代码实例,阅读该示例代码,进行修改后用于自己的项目。

高阶近似的博客 2万+

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇

Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇 文章目录Oracle11g安装教程、配置实例、监听、客户端程序详解_Windows篇前言一、数据库的安装前准备,前提是没有安装过!!!二、仅安装数据库软件(数据库运行环境)三、添加数据库实例四、设置监听程序,让数据库可以通过网络访问五、为目标数据库设置网名总结 前言 如果需要安装包:联系我看到会给你链接,因为现在官网已经不提供10g,11g的安装包了,在网盘保存望悉知(回复不会很及时,下班看到会回复敬请谅解)。 提示:以下

zhx__的博客 5630

推荐项目:Twin.macro - 将Tailwind CSS与CSS-in-JS的灵活性结合

在前端开发的世界里,我们常常面临样式库的选择困扰。要么选择强大但可能过度复杂的预处理器,比如Sass或Less;要么选择简洁灵活的CSS-in-JS方案,如styled-components和Emotion。现在,有了[Twin.macro](https://github.com/ben-rogerson/twin.macro),你可以在享受Tailwind CSS的便捷性的同时,体验到CSS-i...

gitblog_00078的博客 588

手把手教你用HiNet实现图像隐藏:可逆神经网络实战指南(附代码)

本文提供了一份基于HiNet框架实现图像隐藏的实战指南。通过详细解析可逆神经网络原理,手把手指导环境搭建、模型构建、损失函数设计及训练流程,并附有完整代码。该方法利用单个可逆网络统一隐藏与恢复过程,结合小波变换提升隐蔽性,为信息隐藏应用提供了高效解决方案。

rgv234567的博客 433

VoltAgent A2A Server 实战指南:用 JSON-RPC 把 VoltAgent Agent 暴露给外部 Agent

本篇技术指南围绕 `@voltagent/a2a-server` 包展开,讲解如何把 VoltAgent 中的 Agent 通过 Agent-to-Agent(A2A)协议以 JSON-RPC 形式暴露出去,让其他 Agent、IDE 或编排框架可以通过 HTTP/SSE 调用。读完本文,你将掌握 A2A Server 的安装与初始化、在 VoltAgent 中的自动注册方式、四个核心 JSON-

gitblog_00764的博客 764

从零到一:在K210上实现YOLO模型在线训练与部署全流程

本文详细介绍了在K210芯片上实现YOLO模型在线训练与部署的全流程,涵盖数据采集、模型优化、量化转换及内存管理等关键环节。通过实战案例和代码示例,帮助开发者高效利用K210的超低功耗特性与YOLO模型的实时检测能力,适用于边缘计算和物联网应用场景。

weixin_29094539的博客 350

centos7搭建LNMP环境-编译安装&yum安装-超详细

文章目录1. 首先了解编译安装和yum安装的区别。2. yum安装准备工作---切换阿里云yum源3. 编译安装lnmp4.yum安装lnmp5. lnmp一键安装6. 一些报错7. 笔记8. 参考文章 1. 首先了解编译安装和yum安装的区别。 windows下安装centos虚拟机,之前写过。传送门~~ 编译安装: 可以按需安装,想安在哪个目录下就安在哪个目录下。 可以设定参数 可安装自己想要的版本 yum安装: 安装的方便快捷 不需要考虑包的依赖 可以直接使用service nginx st

最美不过下雨天 9349

如何使用CSS变量实现twin.macro动态主题:完整指南

twin.macro是一个将Tailwind的强大功能与css-in-js的灵活性相结合的构建时工具,它允许开发者在使用emotion、styled-components等库时轻松应用Tailwind样式。本指南将详细介绍如何通过CSS变量实现twin.macro的高级主题定制,帮助你创建动态且可切换的界面样式。 ## 为什么选择CSS变量进行主题定制 在twin.macro中使用CSS变量进

gitblog_01170的博客 801

20251121更新纷玩岛

【代码】20251121更新纷玩岛。

猫敷雪 1019

tailwind css_如何使用Tailwind CSS,样式化的组件和Twin Macro用更少的代码来样式化您的React应用

tailwind cssTailwind is a utility-first CSS framework for rapidly building custom designs. It can be used alone to style React Apps. However, it can be better combined with Styled Components. That com...

cumian8165的博客 1643

[deprecated]第九章:SVM机制: 9-2 Linux HMM原理与实现详解

Linux内核HMM(异构内存管理)子系统为异构计算平台提供统一内存管理机制,支持CPU与GPU等设备共享虚拟地址空间,实现零拷贝数据访问。其核心功能包括:1)统一虚拟地址空间,设备可直接访问CPU进程内存;2)实时页表同步与失效通知,确保地址空间一致性;3)支持设备端page fault处理;4)管理多种内存类型(系统内存、设备私有内存等)。HMM通过mmu_interval_notifier机制感知地址空间变化,提供标准API简化驱动开发,显著提升异构计算性能和数据传输效率。

图形/计算GPU的驱动与虚拟化技术分享园地 2547

1.5 RAG技术栈全景图:LangChain vs LlamaIndex深度对比,选错框架后悔3年,一文帮你选对

摘要:LangChain与LlamaIndex框架深度对比 本文全面对比了RAG领域两大主流框架LangChain和LlamaIndex。LangChain是通用AI应用框架,具有模块化设计和丰富生态;LlamaIndex专为RAG优化,提供开箱即用解决方案。功能对比显示,LangChain在文档加载和Agent支持方面更强,而LlamaIndex在检索策略、向量存储和多模态处理上表现更优。代码示例展示了二者实现RAG的不同方式:LangChain需要更多配置但灵活性高,LlamaIndex则提供更简洁的A

yonggeit的博客 3239

探索"Twin Macro":一套强大且灵活的CSS-in-JS解决方案

探索"Twin Macro":一套强大且灵活的CSS-in-JS解决方案 项目介绍 欢迎来到"Twin Macro"的世界,这是一个让人眼前一亮的CSS-in-JS库,它通过简洁而强大的语法糖,让你在各种前端框架中轻松实现样式编写。该项目提供了一系列丰富多样的示例,覆盖了从基础到高级的各种场景,旨在帮助开发者快速上手并体验其魅力。 项目技术分析 "...

gitblog_00064的博客 549

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

twin.macro:重新定义现代化Web交互反馈系统

在当今高度动态的Web应用中,用户交互的即时反馈已成为衡量应用品质的重要标准。twin.macro作为Tailwind CSS与CSS-in-JS的完美融合,正在重塑前端开发中的视觉反馈体验。 ## 交互反馈的现代挑战 传统的Web应用在用户操作反馈方面存在诸多痛点:点击按钮后无响应、复制操作无确认提示、状态变化缺乏视觉引导。这些问题不仅影响用户体验,更可能导致用户流失。 twin.macr

gitblog_01073的博客 954

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

7个实用技巧!Twin.macro样式属性完全指南:从基础到高级实践

Twin.macro 是一个将 Tailwind 的强大功能与 css-in-js 的灵活性完美结合的工具,它能在构建时将 Tailwind 类转换为 css-in-js 样式对象,让开发者享受两者的优势。本文将从基础到高级,全面介绍 Twin.macro 样式属性的使用方法和实用技巧。 ## 一、Twin.macro 基础:核心样式属性介绍 ### 1.1 tw prop:快速应用 Tail

gitblog_00638的博客 483

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

twin.macro与WebAssembly样式计算:构建高性能前端应用的新范式

你是否还在为前端样式计算的性能问题而困扰?当项目规模扩大,CSS-in-JS的运行时开销是否让你感到力不从心?本文将深入探讨如何将twin.macro与WebAssembly(Wasm)结合,打造极致性能的样式计算方案,让你的前端应用在保持开发效率的同时,获得接近原生的执行速度。读完本文,你将了解twin.macro的核心原理、WebAssembly在样式计算中的应用场景,以及如何通过两者的结合解...

gitblog_00038的博客 856

如何参与twin.macro社区治理:开发者决策指南

twin.macro是一个创新的CSS-in-JS工具,它巧妙地将Tailwind CSS的实用性与现代CSS-in-JS库(如emotion、styled-components、stitches和goober)的灵活性相结合。这个开源项目的社区治理模式为开发者提供了参与项目决策的绝佳机会,让每个人都能为这个优秀工具的发展贡献力量。🚀 ## 理解twin.macro的核心价值 在深入了解社区

gitblog_01018的博客 344

如何加入twin.macro社区:探索贡献与成长机会

twin.macro作为一款将Tailwind的便捷性与css-in-js的灵活性完美结合的构建时工具,其社区正不断发展壮大。虽然目前项目中没有直接的招聘信息,但参与开源贡献是加入社区、提升技能并可能开启职业机会的最佳途径。本文将为你介绍如何通过贡献twin.macro项目来开启你的开源之旅。 ## 为什么选择贡献twin.macro? 参与twin.macro项目贡献不仅能提升你的技术能力,

gitblog_00244的博客 341

如何为twin.macro项目贡献多语言翻译:全球开发者协作指南

twin.macro是一个强大的CSS-in-JS工具,它将Tailwind CSS的魔法与流行的CSS-in-JS库(如Emotion、Styled Components、Solid-styled-components、Stitches和Goober)的灵活性完美结合。这个开源项目通过Babel在构建时将Tailwind类转换为CSS对象,为开发者提供了无与伦比的开发体验。本文将详细介绍如何参与

gitblog_01193的博客 385

告别样式丢失:用twin.macro实现高效持久化方案

在现代前端开发中,样式管理一直是开发者面临的重要挑战。twin.macro作为一款将Tailwind的便捷性与css-in-js的灵活性完美结合的工具,为开发者提供了全新的样式编写体验。然而,在实际开发过程中,样式丢失或错乱的问题仍然时有发生,影响用户体验和开发效率。本文将详细介绍如何利用twin.macro的特性,结合前端存储方案,实现样式的持久化管理,让你的样式不再"离家出走"。 ## 为什

gitblog_00758的博客 378

如何高效使用 Twin.macro 打造强大的 Styled Components:完整指南

Twin.macro 是一个革命性的工具,它将 Tailwind 的强大功能与 css-in-js(如 emotion、styled-components 等)的灵活性在构建时完美结合。本指南将带您从零开始掌握在 Twin.macro 项目中使用 Styled Components 的核心技巧,帮助您轻松创建可维护、高度定制的 UI 组件。 ## 基础样式设置:快速创建组件 使用 Twin.m

gitblog_00228的博客 382
上一篇: 主流平台的替代前端,这份清单全给你整理好了
普通网友
博客等级 码龄1年 12粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值