Compatibilidad y actualización
Esta página reúne lo que debe saber antes de actualizar o depender de una salida exacta: los requisitos del entorno de ejecución, qué versión de TailwindCSS sigue el port, en qué aspectos TailwindPHP difiere deliberadamente de TailwindCSS y las notas de cada versión. El historial completo está en CHANGELOG.md.
Requisitos
- PHP 8.2 o posterior. El conjunto de pruebas se ejecuta en PHP 8.2, 8.3 y 8.4.
- Las extensiones
ctypeymbstring. El compilador usactype_*ymb_chr(). Ambas vienen incluidas en la mayoría de las compilaciones de PHP y en las imágenes oficiales de Docker, perocomposer.jsonaún no las declara (#11), así que una compilación sin ellas instala el paquete, pero falla en tiempo de ejecución. - Opcional:
pcntlpermite que el modo--watchdel CLI se detenga correctamente anteSIGINT/SIGTERM. El modo de observación funciona sin esta opción.
No intervienen Node.js, FFI ni binarios nativos.
Versión de TailwindCSS que se sigue
La versión 1.7.0 sigue TailwindCSS v4.3.3. El repositorio original está fijado como submódulo de git en reference/tailwindcss; sus conjuntos de pruebas se extraen de esa versión fijada y las pruebas de 4,427 se ejecutan en cada push (consulte Rendimiento y pruebas). Los plugins portados siguen @tailwindcss/typography y @tailwindcss/forms; las utilidades de clase siguen clsx, tailwind-merge y CVA, todos fijados del mismo modo.
Diferencias conocidas con TailwindCSS
Detalles de serialización
El CSS generado coincide con los conjuntos de pruebas de referencia. Algunos detalles de serialización difieren de lo que muestra TailwindCSS CLI, pero ninguno afecta la cascada:
- Prefijos de proveedor: cuando la referencia genera tanto la línea
-webkit-*escrita por el autor como otra generada, TailwindPHP genera una sola línea. - Los seudoelementos reducidos de nivel (
::file-selector-button,::-webkit-datetime-edit-*) permanecen en las listas de selectores originales en vez de separarse en una regla por seudoelemento. - Las cadenas originales entre comillas simples siguen con comillas simples (
'Segoe UI') en vez de normalizarse a comillas dobles. - Las propiedades longhand que aparecen juntas no se combinan en una propiedad abreviada (la salida de Tailwind no lo necesita).
.p-0conservapadding: 0pxcuando la referencia CLI generapadding: 0, porque el corpus de pruebas extraído fija el formato0px. El minificador lo acorta a0.
No incluido
TailwindPHP es un compilador de CSS. Deja fuera las herramientas del editor del ecosistema de Tailwind (IntelliSense, autocompletado y ordenación de clases) y los mapas de origen, por lo que CLI no tiene una opción --map.
Análisis del contenido
tw::generate() y TailwindCompiler::generate() solo leen nombres de clase de los atributos class y className. Para nombres de clase incluidos en cadenas PHP o JavaScript, use tw::extractCandidatesFromStrings() o @source inline("…"). El API ignora las rutas de @source, mientras que el CLI solo las respeta parcialmente (consulte más abajo).
Problemas conocidos de la versión actual
| Área | Comportamiento actual | Problema |
|---|---|---|
CLI @source |
No se aplican rutas ni patrones glob; se analiza el directorio del archivo de entrada y @source not no excluye nada. Consulte Qué analiza CLI |
#8 |
CLI --optimize |
Minifica, igual que --minify |
#9 |
| Opciones largas de CLI | Se ignora --input file.css (separado por espacios); use --input=file.css o -i file.css |
#13 |
| Variantes de plugins | Las variantes addVariant()/matchVariant() y los modificadores de elementos tipográficos (prose-headings: …) se compilan sin su selector |
#10 |
Mixins de @apply |
Se descarta @apply --my-mixin; en vez de pasarse tal cual |
#12 |
| Importaciones de referencia | La salida está vacía si una importación de referencia precede a la importación de utilidades; @import "tailwindcss" reference no tiene efecto |
#14 |
Notas de actualización
1.7.0
- La salida cambia byte a byte con respecto a 1.6.x, aunque sigue siendo funcionalmente equivalente a la referencia TailwindCSS v4.3.3. Entre los cambios visibles:
- Multiplicadores de espaciado:
p-1generapadding: var(--spacing)en vez de uncalc(), y un multiplicador de0genera una longitud de cero sin unidad. - Las fracciones se convierten en porcentajes:
w-1/2generawidth: 50%. - Colores: la luminosidad de
oklch()/oklab()se serializa como porcentaje (oklch(62.3% .214 259.815));whiteyblackse acortan a#fffy#000. - Los seudoelementos de CSS2 se serializan con dos puntos simples (
:before,:after,:first-letter,:first-line). - Las reglas anidadas de
@media/@supports/@containerse aplanan en su lugar y en el orden del código fuente, en vez de trasladarse al final; las declaraciones se reordenan como lo hace lightningcss y se eliminan las declaraciones duplicadas que quedan ocultas.
- Multiplicadores de espaciado:
- Las cachés basadas en la salida se invalidan una vez. La clave de la caché de archivos de
tw::generate()no incluye la versión de TailwindPHP, así que ejecutetw::clearCache()(o el directorio que indicó comocache) después de actualizar. La caché del estado del compilador se invalida automáticamente. - Nuevo:
@varianten CSS de autor, mixins CSS en@apply,@media referencey@import "…" reference, el motor completo de--value()/--modifier()para@utilityfuncional, validación más estricta de nombres@utilityy la opciónpolyfillsdetw::compile().
1.6.1
- Nuevo: la utilidad
container(width: 100%más unmax-widthpor punto de interrupción). - Las variables
--tw-*compuestas (translate, scale, rotate, skew, filtros y otras) ahora se registran con@property, de modo que las hojas de estilos incorporan esas reglas@propertyy las transformaciones, comotranslate-x-7, funcionan en el navegador.
1.6.0
- Nuevo: la caché persistente del estado del compilador (
stateCacheFileentw::compile()yTailwindCompiler,StateCache\compileCssCached()) y las funciones separadasparseCssState()/finalizeCssState()/compileParsed(). Las llamadas existentes funcionan exactamente igual que antes.
1.5.0
- Las subclases de
TailwindCompilerque redefinangenerate()ocss()deben añadir el parámetro opcionalbool $minify = false; PHP rechaza las redefiniciones que omiten un parámetro opcional de la clase base. - La salida minificada ahora procede del serializador, por lo que los bytes difieren ligeramente de 1.4.x (las cachés basadas en la salida minificada se invalidan una vez).
- Nuevo:
generateExact()ycssExact()para obtener CSS por página desde un único compilador de larga duración.