TailwindPHP
TailwindCSS 4.x 的 PHP 移植版。在 PHP 中生成 Tailwind 工具类 CSS,无需 Node.js,也无需构建步骤。内置 cn()、tailwind-merge、CVA、排版和表单插件,以及一个 CLI。
composer require tailwindphp/tailwindphp最新版本 v1.7.0 MIT PHP 8.2+
use function TailwindPHP\merge;
merge('px-2 py-1 bg-red-500', 'px-4 bg-blue-500');
// => 'py-1 px-4 bg-blue-500'
// Conflict resolution is variant-aware
merge('hover:bg-red-500', 'hover:bg-blue-500');
// => 'hover:bg-blue-500'实践应用
将标记和可选的输入 CSS 传入一次 PHP 调用,即可获得样式表。
根据 PHP 生成 CSS
tw::generate() 会扫描标记中的类名,并只返回这些类所需的 CSS。第二个参数接受输入 CSS,因此在 @theme 中定义的颜色也会成为实用工具。
cn() 会构建类名字符串并解析 Tailwind 冲突,因此最后出现的冲突实用工具会生效。
use TailwindPHP\tw;
$css = tw::generate(
'<div class="bg-brand p-4">Hello</div>',
'@import "tailwindcss"; @theme { --color-brand: #3b82f6; }'
);
// .bg-brand now resolves to var(--color-brand)use function TailwindPHP\cn;
cn('px-2 py-1', 'px-4'); // 'py-1 px-4'
cn('btn', ['btn-primary' => true]); // 'btn btn-primary'纯 PHP
无需 Node.js,也无需构建步骤。运行于 PHP 8.2+,需启用标准的 mbstring 和 ctype 扩展。执行 composer require 即可开始。
跟踪 TailwindCSS v4.3.3
将 Tailwind v4.3.3 移植过来,提供相同的实用工具、变体和指令。与 Tailwind 的已知差异均有文档说明。
4,400+ 项测试
输出会根据 TailwindCSS 自带的测试套件进行验证;这些测试套件从 TypeScript 源码中提取,并在每次推送时重新运行。
所有实用工具和变体
完整的实用工具集和所有变体:悬停、焦点、响应式、暗色模式、容器查询和任意值。
CSS 指令
@import、@theme、@apply、@utility、@custom-variant、@layer、@plugin 和 @source,均在 PHP 中解析和求值。
运行时生成
根据 HTML、数据库内容或模板变量即时生成实用工具 CSS。无需构建步骤。
开箱即用
cn()、merge()、join() 和 variants():将 clsx、tailwind-merge 和 CVA 移植到 PHP,无需额外软件包。
插件
将 @tailwindcss/typography 和 @tailwindcss/forms 移植到 PHP,并提供一个 PHP 插件 API,供你编写自己的实用工具和组件。
CLI
bin/tailwindphp 会根据输入 CSS 文件构建样式表,支持 -i、-o、--watch 和 --minify。
检查主题
直接从 PHP 读取任意类的原始和计算后属性值、颜色、断点和间距。
缓存和压缩器
内置的 CSS 压缩器和带 TTL 的文件缓存,让重复构建更快、输出更精简。
WordPress 和 PHP 框架
发布基于 Tailwind 的主题和插件,无需在技术栈中加入 Node.js。TailwindPHP 只是一个 Composer 依赖项。
为什么选择 TailwindPHP
在生产环境中使用单一运行时
采用 Tailwind 的 PHP 项目通常还需要 Node.js、安装 npm,并在 CI 和 Docker 中执行构建步骤。TailwindPHP 则会在 PHP 进程内编译 CSS。
适用于运行时已知的内容的 CSS
来自数据库、用户输入或模板变量的标记都可以直接传给 tw::generate(),它只会返回这些类所需的 CSS。
根据固定版本的 Tailwind 验证
测试用例从仓库中固定版本的 Tailwind 源码提取,并针对 PHP 输出运行,因此版本偏差会导致 CI 失败。1.7.0 版本已通过 4,427 项测试,根据 Tailwind v4.3.3 进行了验证。
通过一个编译器生成每页的 CSS
使用 tw::compile() 编译一次主题,然后为每个页面调用 generateExact()。每次调用都会返回该页面在冷启动 tw::generate() 时的生成结果,无需再次解析主题。
对比
Tailwind Labs 提供了自有的 Tailwind CSS 构建方式。以下是 TailwindPHP 的不同之处。
| 工具 | 擅长领域 | 与 TailwindPHP 的区别 |
|---|---|---|
| Tailwind CLI (@tailwindcss/cli) | 擅长领域Tailwind 自带的命令行工具,可从 npm 安装。它会扫描你的 HTML 文件、组件和模板中的类名,并将匹配的样式写入静态 CSS 文件。 | 与 TailwindPHP 的区别TailwindPHP 可在 PHP 内编译,无需安装 Node.js 或 npm。它会跟踪固定的 Tailwind 版本(1.7.0 中的 v4.3.3),并且它自己的基准测试显示,上游 TypeScript 执行底层操作的速度更快。 |
| 独立的 Tailwind CLI | 擅长领域Tailwind CLI 是独立的可执行文件,适合希望使用它但不安装 Node.js 的项目。 | 与 TailwindPHP 的区别该可执行文件是一个独立二进制文件,作为构建步骤运行。TailwindPHP 是一个由你的 PHP 代码调用的 Composer 软件包,因此也能在请求时根据数据库内容或模板变量生成 CSS。 |
| Tailwind Play CDN | 擅长领域通过脚本标签在浏览器中运行 Tailwind,无需构建步骤即可试用。Tailwind 的文档说明,它专为开发设计,不适用于生产环境。 | 与 TailwindPHP 的区别TailwindPHP 同样无需构建步骤,但它会在服务器上用 PHP 生成 CSS 并以字符串形式返回,例如可将其写入样式表。 |
问答
来自 TailwindPHP 文档的简明解答。
1.7.0 版本跟踪 Tailwind CSS v4.3.3。其测试套件已针对该版本重新提取。
输出会根据从 Tailwind 自带测试文件中提取的用例进行测试。1.7.0 更新日志记录了少量序列化差异,例如 .p-0 会保留 padding: 0px,而参考 CLI 输出 padding: 0。
不可以。插件是 PHP:已移植排版和表单插件,你也可以基于 PHP 插件 API 编写自己的插件,并通过 registerPlugin() 注册。使用未注册的 @plugin 名称会报错。
在该项目于 PHP 8.4.5 和 Apple M1 上进行的基准测试中,生成完整页面每页约需 14 ms。对于重复输入,文件缓存会跳过编译;长期运行的编译器配合 generateExact() 可复用已解析的主题。
不包含。IntelliSense、自动补全、类名排序和源映射均有意省略。TailwindPHP 只负责生成 CSS。
PHP 8.2 或更高版本,需启用 ctype 和 mbstring 扩展。composer.json 声明了 PHP 版本,CI 会在 PHP 8.2、8.3 和 8.4 上运行测试套件。
使用 Composer 安装软件包,并按照入门指南根据 PHP 生成你的第一个样式表。