Klašu utilītas
class atribūtu veidošana veidnēs nozīmē virkņu savienošanu, klašu pārslēgšanu atkarībā no nosacījumiem un to, ka vēlāk pievienotās utilītas nedrīkst konfliktēt ar iepriekšējām (p-2 un p-4 nedrīkst abas palikt). JavaScript šis darbs sadalīts starp clsx un tailwind-merge. TailwindPHP ietver abu PHP realizācijas, tāpēc iegūstat tādu pašu darbību bez Node.js rīkkopas un papildu Composer pakotnēm.
Trīs funkcijas aptver visas vajadzības: cn() veido un novērš konfliktus, merge() novērš tikai konfliktus, bet join() tikai savieno virknes.
cn()
Ieteicamā utilīta. Vispirms tā veic nosacījumu apstrādi kā clsx, pēc tam atrisina Tailwind konfliktus ar tailwind-merge — tādējādi uzvar pēdējā konfliktējošā utilīta.
use function TailwindPHP\cn;
// Conflicts are resolved — px-4 overrides px-2
cn('px-2 py-1', 'px-4');
// => 'py-1 px-4'
// Conditional classes via a key => bool array
cn('btn', ['btn-primary' => true, 'btn-disabled' => false]);
// => 'btn btn-primary'
Pieņemtie argumenti
cn() pieņem jebkādu argumentu skaitu. Katrs arguments tiek saplacināts un filtrēts atbilstoši clsx semantikai:
| Arguments | Darbība |
|---|---|
string |
Pievieno, kā ir. |
int / float |
Pārvērš par virkni un pievieno. |
| Ligzdots masīvs | Katru elementu apstrādā rekursīvi. |
key => bool masīvs |
Pievieno katru atslēgu, kuras vērtība ir patiesa. |
null, false, 0, '' |
Ignorē. |
cn('flex', ['items-center' => true], ['p-4', ['gap-2']], null);
// => 'flex items-center p-4 gap-2'
Komponenta paraugs
cn() ļauj pielāgot komponentu: apvienojiet komponenta klases ar zvanītāja padotajām klasēm, un konfliktu gadījumā priekšroka būs zvanītāja vērtībām.
use function TailwindPHP\cn;
function Card(array $props = []): string {
$class = cn(
'rounded-lg border bg-card text-card-foreground shadow-sm',
$props['class'] ?? null
);
return "<div class=\"{$class}\">" . ($props['children'] ?? '') . "</div>";
}
Card(['class' => 'p-6', 'children' => 'Content']);
// <div class="rounded-lg border bg-card text-card-foreground shadow-sm p-6">Content</div>
Deklaratīviem komponentu stiliem ar vairākām dimensijām apvienojiet cn() ar variants().
merge()
Tikai konfliktu atrisināšana — nosacījumi netiek apstrādāti. Padodiet klašu virknes; vēlākās klases aizstāj agrākās, ja tās attiecas uz vienu un to pašu īpašību. Izmantojiet šo funkciju, ja ievade jau sastāv no vienkāršām virknēm.
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'
cn() ir merge(), kas veidots uz clsx pamata, tāpēc izmantojiet tieši merge() tikai tad, ja jums nav vajadzīga nosacījumu sintakse ar masīviem.
join()
Vienkārši savieno virknes, neatrisinot konfliktus. Nepatiesās vērtības tiek atmestas, bet visas konfliktējošās utilītas tiek paturētas. Izmantojiet šo funkciju, ja zināt, ka konfliktu nav, un vēlaties pēc iespējas mazāku apstrādi.
use function TailwindPHP\join;
join('foo', 'bar', null, 'baz');
// => 'foo bar baz'
Kuru funkciju izmantot?
| Funkcija | Veido (nosacījumi, masīvi) | Atrisina konfliktus | Kad izmantot |
|---|---|---|---|
cn() |
jā | jā | Noklusējuma izvēle — klašu virkņu veidošanai, ja iespējami konflikti. |
merge() |
nē | jā | Ievade ir vienkāršas virknes; jānovērš tikai konflikti. |
join() |
jā | nē | Konfliktu nav, un nepieciešama minimāla apstrāde. |
Importi
use function TailwindPHP\cn;
use function TailwindPHP\merge;
use function TailwindPHP\join;
Visas trīs funkcijas atrodas galvenajā TailwindPHP nosaukumtelpā un ir iekļautas pakotnē. Tās ir PHP clsx (autors Luke Edwards) un tailwind-merge (autors Dany Castillo) realizācijas.