Compatibilità e aggiornamenti
Questa pagina raccoglie le informazioni da conoscere prima di aggiornare o fare affidamento su un output esatto: i requisiti di runtime, le versioni di TailwindCSS seguite dal port, le differenze intenzionali di TailwindPHP rispetto a TailwindCSS e le note per ogni versione. La cronologia completa è in CHANGELOG.md.
Requisiti
- PHP 8.2 o versioni successive. La suite di test viene eseguita su PHP 8.2, 8.3 e 8.4.
- Le estensioni
ctypeembstring. Il compilatore chiamactype_*emb_chr(). Entrambe sono incluse nella maggior parte delle build di PHP e nelle immagini ufficiali Docker, macomposer.jsonnon le dichiara ancora (#11), quindi una build che ne è priva installa il pacchetto ma poi fallisce durante l'esecuzione. - Facoltativo:
pcntlconsente alla modalità--watchdi CLI di arrestarsi correttamente suSIGINT/SIGTERM. Senza, la modalità di monitoraggio funziona comunque.
Non sono necessari Node.js, FFI o binari nativi.
Quale versione di TailwindCSS viene seguita
La versione 1.7.0 segue TailwindCSS v4.3.3. Il repository upstream è bloccato come sottomodulo git in reference/tailwindcss; le suite di test vengono estratte da quel checkout bloccato e i test 4,427 vengono eseguiti a ogni push (vedere Prestazioni e test). I plugin portati seguono @tailwindcss/typography e @tailwindcss/forms, mentre le utility per le classi seguono clsx, tailwind-merge e CVA, tutti bloccati allo stesso modo.
Differenze note rispetto a TailwindCSS
Dettagli di serializzazione
CSS generato corrisponde alle suite di test di riferimento. Alcuni dettagli di serializzazione differiscono da quanto prodotto da TailwindCSS CLI, senza modificare la cascata:
- Prefissi vendor: quando il riferimento emette sia la riga
-webkit-*originale sia una generata, TailwindPHP emette una sola riga. - Gli pseudo-elementi trasformati per le versioni precedenti (
::file-selector-button,::-webkit-datetime-edit-*) restano negli elenchi di selettori originali invece di essere separati in una regola per pseudo-elemento. - Le stringhe originali tra apici singoli restano tali (
'Segoe UI') invece di essere normalizzate con doppi apici. - Le proprietà longhand presenti insieme non vengono combinate in una proprietà shorthand (l'output di Tailwind non ne ha mai bisogno).
.p-0mantienepadding: 0pxdove il riferimento CLI emettepadding: 0, perché il corpus di test estratto fissa la forma0px. Il minificatore la accorcia in0.
Funzionalità non incluse
TailwindPHP è un compilatore CSS. Esclude gli strumenti per l'editor dell'ecosistema Tailwind (IntelliSense, completamento automatico e ordinamento delle classi) e le source map, quindi la CLI non offre un'opzione --map.
Analisi dei contenuti
tw::generate() e TailwindCompiler::generate() leggono i nomi delle classi solo dagli attributi class e className. Per i nomi delle classi contenuti in stringhe PHP o JavaScript, usate tw::extractCandidatesFromStrings() oppure @source inline("…"). Le forme di percorso di @source vengono ignorate da API e considerate solo in parte da CLI (vedi sotto).
Problemi noti nella versione attuale
| Area | Comportamento attuale | Problema |
|---|---|---|
CLI @source |
I percorsi e i pattern glob non vengono applicati; viene invece analizzata la directory del file di input e @source not non esclude nulla. Consultate Cosa analizza CLI |
#8 |
CLI --optimize |
Esegue la minificazione, come --minify |
#9 |
| Opzioni lunghe di CLI | --input file.css (separato da spazi) viene ignorato; usate --input=file.css o -i file.css |
#13 |
| Varianti dei plugin | Le varianti addVariant()/matchVariant() e i modificatori degli elementi tipografici (prose-headings: …) vengono compilati senza il relativo selettore |
#10 |
Mixins @apply |
@apply --my-mixin; viene eliminato invece di essere mantenuto |
#12 |
| Import di riferimento | L'output è vuoto se un import di riferimento precede l'import delle utilità; @import "tailwindcss" reference non ha effetto |
#14 |
Note sugli aggiornamenti
1.7.0
- L'output cambia byte per byte rispetto a 1.6.x, pur restando funzionalmente equivalente al riferimento TailwindCSS v4.3.3. Tra le differenze visibili:
- Moltiplicatori di spaziatura:
p-1emettepadding: var(--spacing)anziché uncalc(); un moltiplicatore di0emette invece una lunghezza pari a zero senza unità. - Le frazioni diventano percentuali:
w-1/2emettewidth: 50%. - Colori: la luminosità di
oklch()/oklab()viene serializzata come percentuale (oklch(62.3% .214 259.815));whiteeblackdiventano rispettivamente#fffe#000. - Gli pseudo-elementi CSS2 vengono serializzati con un solo due punti (
:before,:after,:first-letter,:first-line). - Le regole
@media/@supports/@containerannidate vengono appiattite sul posto, nell'ordine del sorgente, invece di essere spostate alla fine; le dichiarazioni vengono riordinate secondo l'ordine di lightningcss e le dichiarazioni duplicate con valori sovrascritti vengono rimosse.
- Moltiplicatori di spaziatura:
- Le cache basate sull'output vengono invalidate una volta. La chiave della cache su file di
tw::generate()non include la versione di TailwindPHP, quindi dopo l'aggiornamento eseguitetw::clearCache()(o svuotate la directory passata comecache). La cache dello stato del compilatore si invalida automaticamente. - Novità:
@variantnel CSS dell'autore, mixins CSS in@apply,@media referencee@import "…" reference, il motore completo--value()/--modifier()per@utilityfunzionali, convalida più rigorosa dei nomi@utilitye l'opzionepolyfillsditw::compile().
1.6.1
- Novità: l'utilità
container(width: 100%più unmax-widthper ogni punto di interruzione). - Le variabili
--tw-*composte (translate, scale, rotate, skew, filtri e altre) sono ora registrate con@property, così i fogli di stile acquisiscono queste regole@propertye trasformazioni cometranslate-x-7hanno effetto nel browser.
1.6.0
- Novità: la cache persistente dello stato del compilatore (
stateCacheFilesutw::compile()eTailwindCompiler,StateCache\compileCssCached()) e le funzioni separateparseCssState()/finalizeCssState()/compileParsed(). Le chiamate esistenti si comportano esattamente come prima.
1.5.0
- Le sottoclassi di
TailwindCompilerche sovrascrivonogenerate()ocss()devono aggiungere il parametro facoltativobool $minify = false; PHP rifiuta le sovrascritture che omettono un parametro facoltativo della classe genitore. - L'output minificato proviene dal serializzatore, quindi differisce leggermente byte per byte da 1.4.x (le cache basate sull'output minificato vengono invalidate una volta).
- Novità:
generateExact()ecssExact()per CSS separati per pagina da un unico compilatore a lunga durata.