Sviluppo web
Scrivere un plugin Tailwind
In Tailwind 4 un plugin personalizzato è una regola @utility nel CSS. Il plugin JavaScript conviene solo quando devi distribuire utility come pacchetto.
In sintesi
- @utility aggiunge una utility personalizzata senza JavaScript.
- @plugin carica un plugin JavaScript, da pacchetto o da file locale.
- safelist e corePlugins non esistono in Tailwind 4.
In Tailwind CSS 4 un plugin personalizzato si scrive con @utility nel CSS; il plugin JavaScript serve solo quando devi distribuirlo come pacchetto.
La via breve: @utility
@import "tailwindcss";
@utility content-auto {
content-visibility: auto;
contain-intrinsic-size: 1px 500px;
}
L'utility finisce nel layer utilities e accetta le varianti: hover:content-auto, lg:content-auto. Non serve JavaScript, non serve tailwind.config.js e non serve un pacchetto.
Utility con un valore
Una utility funzionale riceve un argomento tramite --value():
@theme {
--tab-size-github: 8;
}
@utility tab-* {
tab-size: --value(--tab-size-*, integer, [integer]);
}
Così funzionano tab-2, tab-76, tab-github e tab-[3]. --value() legge chiavi del tema, valori nudi e valori arbitrari; le dichiarazioni che non risolvono vengono omesse dall'output.
Quando serve un plugin JavaScript
Un plugin JavaScript resta utile se pubblichi utility per altri progetti. Si scrive con l'helper plugin():
import plugin from "tailwindcss/plugin";
export default plugin(({ addUtilities, addVariant }) => {
addUtilities({
".content-auto": { "content-visibility": "auto" },
});
addVariant("hocus", ["&:hover", "&:focus-visible"]);
});
Si carica con la direttiva @plugin, che accetta un nome di pacchetto o un percorso locale. Le API stabili sono addUtilities, addComponents e addVariant.
@import "tailwindcss";
@plugin "./hocus-plugin.js";
Le opzioni corePlugins e safelist della configurazione JavaScript non sono supportate in 4. Al posto della safelist c'è @source inline().
La limitazione
Un plugin JavaScript è codice tuo: ha un nome, una versione e un test da mantenere, e le utility che genera non esistono nel progetto finché qualcuno non lo carica. In cambio non è tipizzato e un selettore sbagliato fallisce in silenzio. Per due utility interne @utility costa meno e resta nello stesso file.
Dove continuare
Nel catalogo: i componenti Tailwind, la libreria tailwind-admin e le sezioni hero, tutte costruite con utility. Il framework è spiegato in che cos'è Tailwind CSS, le classi mancanti in content paths; per scegliere una libreria leggi le migliori librerie Tailwind e il confronto Tailwind contro CSS Modules.
Domande frequenti
Devo ancora scrivere plugin JavaScript in Tailwind 4?
Solo se pubblichi utility per altri progetti. Dentro un'applicazione, @utility nel CSS copre quasi tutti i casi.
Come si carica un plugin in Tailwind 4?
Con la direttiva @plugin seguita dal nome del pacchetto o da un percorso locale. La direttiva va nel file CSS che importa tailwindcss.
Che differenza c'è tra @utility e addUtilities?
@utility è una regola CSS elaborata dalla build, addUtilities è una funzione dell'API JavaScript. La prima resta nel progetto, la seconda richiede un pacchetto.
Posso usare la safelist in Tailwind 4?
No, safelist e corePlugins della configurazione JavaScript non sono supportati in 4. Al loro posto c'è @source inline(), che elenca le classi da generare.
Un plugin può aggiungere una variante?
Sì, con addVariant nell'API JavaScript o con @custom-variant nel CSS. Per una variante sola, @custom-variant è la via più breve.