
# TailwindPHP

TailwindPHP — это **1:1-порт TailwindCSS 4.x для PHP**. Он анализирует ваш CSS, сканирует разметку в поисках имен классов и генерирует утилитный CSS, который создает TailwindCSS v4.3.3, — полностью в PHP, без Node.js и этапа сборки.

- **Чистый PHP** — поставляется как пакет Composer и работает на PHP 8.2+ со стандартными расширениями `ctype` и `mbstring`. Без `exec`, FFI и инструментов нативной сборки.
- **Проверен на TailwindCSS** — утилиты, варианты, директивы и функции CSS соответствуют TailwindCSS v4.3.3. Результат проверяется с помощью собственных наборов тестов Tailwind, извлеченных из исходного кода TypeScript и повторно запускаемых при каждом обновлении (более 4,400 тестов). Известные различия (несколько деталей сериализации без влияния на каскад, а также открытые вопросы) перечислены в разделе [Совместимость и обновление](https://tailwindphp.inline0.dev/ru/docs/advanced/compatibility).
- **Полный набор функций** — весь набор утилит TailwindCSS v4.3.3 (включая `container`, утилиты полосы прокрутки, `zoom-*` и `tab-*`), все варианты (hover, focus, адаптивность, темный режим, запросы контейнеров, произвольные значения) и полный набор директив: `@import`, `@theme`, `@apply`, `@utility`, `@variant`, `@custom-variant`, `@layer`, `@plugin` и `@source`.
- **Все включено** — `cn()`, `merge()`, `join()` и `variants()` включают PHP-порты clsx, tailwind-merge и CVA, поэтому нужные каждому проекту Tailwind сопутствующие библиотеки уже входят в комплект.
- **Плагины** — `@tailwindcss/typography` и `@tailwindcss/forms` перенесены полностью, а PHP плагин API позволяет создавать собственные.

## Зачем нужен TailwindPHP

TailwindCSS написан на TypeScript и работает на Node.js. Это обязательное условие для любого проекта PHP, которому нужен Tailwind: дополнительная среда выполнения, установка npm и этап сборки в CI и Docker. Для многих приложений PHP такие сложности нежелательны.

TailwindPHP устраняет эту необходимость. Ваш код PHP компилирует Tailwind CSS напрямую, используя только стандартную библиотеку. Это открывает возможности, которые сложно или невозможно реализовать с цепочкой инструментов JavaScript:

- **Фреймворки WordPress и PHP** — поставляйте темы и плагины на основе Tailwind, не требуя от пользователей устанавливать Node.js или запускать сборку. Просто выполните `composer require` и приступайте. См. [TailwindWP](https://github.com/dnnsjsk/tailwindwp) — пример плагина WordPress, который создает CSS редактора блоков с помощью TailwindPHP.
- **CSS во время выполнения** — генерируйте утилитный CSS на лету из пользовательского ввода, данных базы данных или переменных шаблона, а не во время сборки.
- **Более простое развертывание** — без Node.js в продакшене, этапа сборки в CI и npm в образе Docker.

Та же идея, которую [scssphp](https://github.com/scssphp/scssphp) реализовал для SCSS: полный компилятор на PHP.

## Возможности

- Компилирует набор утилит TailwindCSS v4.3.3, варианты и произвольные значения из имен классов, найденных в вашем содержимом.
- Обрабатывает полный набор директив: `@import` (включая виртуальные модули, такие как `tailwindcss` и `tailwindcss/utilities`, а также импорты `reference`), `@theme`, `@apply`, `@utility`, `@variant`, `@custom-variant`, `@layer`, `@plugin` и `@source`.
- Реализует функции CSS из Tailwind — `theme()`, `--theme()`, `--spacing()` и `--alpha()`, — а также преобразование `color-mix()` → `oklab()` и трансформации CSS, которые TailwindCSS делегирует LightningCSS.
- Разрешает `@import` из файловой системы с вложенными импортами, устранением дубликатов и пользовательскими резолверами либо из встроенных строк CSS.
- Поставляется с Preflight (базовым сбросом Tailwind), поддержкой префиксов, фолбэками `@property`, добавлением вендорных префиксов и выносом ключевых кадров.
- Включает `cn()`, `merge()`, `join()` и `variants()`/`compose()` для построения имен классов, разрешения конфликтов и вариантов компонентов.
- Включает плагины типографики и форм, а также плагин API (`addUtilities`, `matchUtilities`, `addComponents`, `addVariant`, `theme`, …) для пользовательских плагинов.
- Предоставляет CLI (`bin/tailwindphp`) с параметрами сборки `@tailwindcss/cli`, кэширование файлового вывода, постоянный кэш состояния компилятора и минификатор CSS для production-среды.

## Чем merql не является

TailwindPHP — компилятор CSS, а не набор инструментов для редактора. В нем намеренно отсутствуют средства для IDE из экосистемы Tailwind — IntelliSense, автодополнение, сортировка классов и карты исходного кода, — поскольку это функции редактора, а не часть генерации CSS. Здесь есть всё, что создает CSS; функций для работы редактора нет.

## С чего начать

- [Начало работы](https://tailwindphp.inline0.dev/ru/docs/getting-started) — установите пакет и создайте свою первую таблицу стилей.
- [Использование](https://tailwindphp.inline0.dev/ru/docs/usage) — сканируйте содержимое, настройте тему и используйте директивы Tailwind.
- [Утилитарные классы](https://tailwindphp.inline0.dev/ru/docs/class-utilities) — `cn()`, `merge()`, `join()` и `variants()`.
- [Плагины](https://tailwindphp.inline0.dev/ru/docs/plugins) — типографика, формы и создание собственных плагинов.
- [API](https://tailwindphp.inline0.dev/ru/docs/api) — полный набор возможностей `tw` и экземпляр `TailwindCompiler`.
- [CLI](https://tailwindphp.inline0.dev/ru/docs/cli) — `bin/tailwindphp` для сборки файлов и режима наблюдения.
- [Дополнительные темы](https://tailwindphp.inline0.dev/ru/docs/advanced) — архитектура, кэширование, производительность и примечания о совместимости.
