21 β Plaginlar ekotizimi¶
β¬ οΈ Oldingi: 20 β Direktiva va funksiyalar Β· π README Β· Keyingi: 22 β Komponentlar va framework integratsiyasi β‘οΈ
Bu bobda: Tailwind'ni plaginlar bilan kengaytirishni o'rganamiz. v4 da plagin CSS ichida
@plugin "..."direktivasi bilan ulanadi (v3 dagiplugins: []massivi emas). Ikki rasmiy plaginni amalda ishlatamiz:@tailwindcss/typography(maqola/blog/markdown matni uchunprosetizimi) va@tailwindcss/forms(forma elementlarini uslublasa bo'ladigan holatga keltiruvchi asos). So'ng eng ko'p so'raladigan savolga javob beramiz: komponent kutubxonalari spektri β sof utility'dan boshlab daisyUI (semantik klasslar), Headless UI (a11y mantiq + sizning uslubingiz) va shadcn/ui ("o'rnatma, nusxa ol") gacha. Qaysi birini qachon tanlashni ham aniq ko'rsatamiz.
21.1 Avval nega? β plagin nima va u qanday muammoni yechadi?¶
Tailwind o'zi katta β minglab utility klass. Lekin u atayin ba'zi narsalarni o'z ichiga olmaydi. Masalan, blogdagi uzun maqola matnini chiroyli qilish uchun siz har bir <h2>, <p>, <ul>, <blockquote> ga qo'lda klass yozishingiz kerak β bu mehnattalab. Yoki standart <input> brauzerda xunuk ko'rinadi va uni uslublash og'riqli.
Aynan shu kabi takrorlanuvchi, paketlangan ehtiyojlar uchun plaginlar bor. Plagin β bu Tailwind'ga qo'shimcha funksiya olib keladigan paket. U:
- qo'shimcha utility'lar (masalan, yangi klasslar),
- asos (base) stillari (forma elementlarini boshqatdan tartiblash kabi),
- yoki tayyor komponent klasslari va temalar (
btn,cardkabi)
bera oladi. Boshqacha aytganda: agar bir necha loyihada bir xil kengaytmani qayta-qayta yozayotgan bo'lsangiz, kimdir uni allaqachon plagin qilib paketlagan bo'lishi mumkin.
π‘ Analogiya. Tailwind β yaxshi jihozlangan oshxona: pichoq, taxta, gaz. Plagin esa β bir maxsus asbob: masalan, makaron mashinasi. Har kuni kerak emas, lekin makaron qilmoqchi bo'lsangiz, uni noldan qo'lda yoyishdan ko'ra mashinani ulagan afzal. Plagin ham β aniq bir ish uchun tayyorlangan, ixtiyoriy qo'shimcha.
π v3 dan eng muhim farq (bir martalik eslatma). Tailwind v3 da plaginlar
tailwind.config.jsfayldagiplugins: [require("...")]massivida ulanardi. v4 da JS config yo'q β plagin to'g'ridan-to'g'ri CSS ichida@plugin "..."direktivasi bilan ulanadi. Internetdaplugins: [require(...)]ko'rsangiz β bu eski v3 yo'li. Bu kitobning yo'li β@plugin.
21.2 v4 da hamma plagin kerakmi? β yo'q, ba'zilari endi yadroda¶
Bobning boshida bitta tuzoqdan ogohlantirib qo'yamiz. v3 da mashhur bo'lgan bir nechta plagin v4 da yadroga (core) ko'chirilgan β ya'ni ularni endi o'rnatish shart emas va xato:
| v3 plagin | v4 dagi holati |
|---|---|
@tailwindcss/aspect-ratio |
Yadroda β aspect-video, aspect-square, aspect-[4/3] to'g'ridan-to'g'ri ishlaydi |
@tailwindcss/container-queries |
Yadroda β @container va @sm:/@lg: variantlari 10-bobda ko'rganimizdek o'rnatishsiz ishlaydi |
@tailwindcss/line-clamp |
Yadroda β line-clamp-3 bevosita mavjud |
Agar eski qo'llanmada bularni npm i -D @tailwindcss/aspect-ratio qilishni ko'rsangiz β e'tibor bermang. v4 da ular allaqachon ichingizda.
Demak, amalda v4 da eng ko'p ishlatadigan ikki rasmiy plagin qoladi: @tailwindcss/typography va @tailwindcss/forms. Ularning ikkalasini ham birma-bir ko'rib chiqamiz.
21.3 Plaginni o'rnatish va ulash β umumiy oqim¶
Har qanday plaginni ishlatish ikki qadamdan iborat: o'rnatish (npm) va ulash (CSS).
/* 2-qadam: app.css ichida ulash β config'da emas, CSS'da! */
@import "tailwindcss";
@plugin "@tailwindcss/typography";
Shu ikki qadamdan keyin plagin bergan hamma narsa (bu holda prose klasslari) loyihangizda tayyor. Ba'zi plaginlar sozlamalarni ham qabul qiladi β buni @plugin dan keyin blok ko'rinishida beriladi:
π Atamalar. Plagin β Tailwind'ga qo'shimcha funksiya olib keladigan npm paketi.
@pluginβ uni CSS ichida ulaydigan v4 direktivasi.-D(--save-dev) β paketni faqat ishlab chiqish (build) uchun o'rnatadi, chunki plagin tayyor saytga emas, build jarayoniga kerak.
21.4 @tailwindcss/typography β prose tizimi¶
Muammo. Bloging, hujjat sayti, CMS yoki markdown'dan kelgan matnni o'ylab ko'ring. Bu matnda o'nlab <h2>, <p>, <ul>, <a>, <blockquote>, <code> bor β va siz ularning klasslarini boshqarmaysiz (ko'pincha matn HTML'ga avtomatik aylantiriladi). Har biriga qo'lda text-xl mt-6 mb-3 ... yozish imkonsiz.
Yechim. @tailwindcss/typography plagini bitta prose klassi orqali ana shu butun ichki matnni avtomatik chiroyli uslublaydi:
<article class="prose lg:prose-lg">
<h1>Tailwind bilan tipografiya</h1>
<p>Bu paragraf, sarlavhalar, ro'yxatlar va iqtiboslar β
hammasi <code>prose</code> klassi bilan o'z-o'zidan uslublanadi.</p>
<ul>
<li>Birinchi band</li>
<li>Ikkinchi band</li>
</ul>
<blockquote>Yaxshi tipografiya β ko'rinmas tipografiya.</blockquote>
</article>
prose ning ichidagi har bir element o'qishga qulay o'lcham, masofa va rang oladi β siz ichki teglarga bitta ham klass yozmaysiz.
O'lcham va rang modifikatorlari¶
prose ni o'zgartirish uchun maxsus modifikatorlar bor:
<!-- Kattaroq matn -->
<article class="prose prose-lg">...</article>
<!-- Rang sxemasi (slate, gray, zinc, neutral, stone) -->
<article class="prose prose-slate">...</article>
<!-- Dark mode uchun teskari rang -->
<article class="prose dark:prose-invert">...</article>
Element modifikatorlari β aniq nuqtani sozlash¶
prose ning ichidagi bitta turdagi elementni o'zgartirmoqchimisiz? prose-<element>: modifikatori bor:
<article class="prose
prose-headings:text-indigo-900
prose-a:text-sky-600 prose-a:no-underline
prose-code:text-rose-600">
...
</article>
Bu β "prose ichidagi barcha sarlavhalar indigo bo'lsin, barcha havolalar sky-600 va chiziqsiz" degani. Aniq nazorat, lekin baribir bitta <article> da.
not-prose β bir qismni chetga chiqarish¶
Maqola ichida bir blok (masalan, interaktiv kalkulyator yoki maxsus karta) prose uslubiga bo'ysunmasligi kerak bo'lsa, uni not-prose bilan o'rab qo'yasiz:
<article class="prose">
<p>Oddiy matn β prose uslubida.</p>
<div class="not-prose">
<!-- bu yerda prose tegmaydi; o'zingiz uslublaysiz -->
<button class="bg-indigo-600 text-white px-4 py-2 rounded-lg">Ariza</button>
</div>
<p>Yana oddiy matn β yana prose.</p>
</article>
π‘ Qachon
prose, qachon yo'q?proseβ siz klassma-klass boshqarmaydigan boy matn uchun (blog posti, hujjat, markdown render, CMS chiqishi). Ilova interfeysi (tugmalar, navbar, kartalar, formalar) uchun esaproseishlatmang β u sizning UI'ngiz bilan urishadi (sarlavhalarga masofa qo'shadi, havolalarni bo'yaydi). UI uchun oddiy utility'lar to'g'ri yo'l.π
proseβ bu 12-bobdagi qo'lda tipografiya bilimingizning paketlangan, avtomatik ko'rinishi. 12-bobda har birtext-*,leading-*,tracking-*ni o'zingiz qo'ygansiz;proseesa shu qarorlarni siz uchun, butun matn blokiga bir vaqtda qabul qiladi.
21.5 @tailwindcss/forms β forma elementlarini uslublasa bo'ladigan qilish¶
Muammo β nega kerak? Brauzerlarning standart forma elementlari (<input>, <select>, <textarea>, checkbox, radio) bir-biriga o'xshamaydi va ularni uslublash qiyin. Siz border rounded focus:ring-2 yozasiz, lekin natija kutilganidek chiqmaydi β chunki brauzer o'zining ichki, qarshilik ko'rsatuvchi standart stilini qo'yib turadi.
Yechim. @tailwindcss/forms plagini barcha forma elementlariga toza, betaraf asos beradi β shundan keyin sizning border, rounded, focus:ring utility'laringiz haqiqatan ishlaydi:
Endi oddiy input ham odamga o'xshaydi:
<!-- forms plaginisiz: bu utility'lar to'liq ishlamasdi -->
<input type="text"
class="border border-slate-300 rounded-lg px-3 py-2
focus:border-indigo-500 focus:ring-2 focus:ring-indigo-200" />
base va class strategiyalari¶
Plagin ikki rejimda ishlay oladi, buni @plugin blokida belgilaysiz:
/* base (standart): barcha forma elementlariga global asos qo'yiladi */
@plugin "@tailwindcss/forms";
/* class: faqat maxsus klass qo'yilgan elementlarga (form-input, form-select...) */
@plugin "@tailwindcss/forms" {
strategy: class;
}
base(standart) β eng qulay: hamma input avtomatik uslublasa bo'ladigan holatga keladi. Yangi loyiha uchun to'g'ri tanlov.classβ ehtiyotkor: faqat sizform-input,form-select,form-checkboxkabi klass qo'ygan elementlar o'zgaradi. Mavjud loyihaga plaginni qo'shayotganda, eski stillarni buzmaslik uchun foydali.
π Oldinga qarash. Bu plagin yordamida forma elementlarini amalda to'liq uslublash β chiroyli input, checkbox, select, validatsiya holatlari β 23-bobda. Hozir shuni bilsangiz kifoya:
@tailwindcss/formsβ bu formalarni uslublashning poydevori.
21.6 Uchinchi tomon (community) plaginini ulash¶
Rasmiy plaginlardan tashqari, jamoa tomonidan yaratilgan ko'plab plaginlar bor (qo'shimcha animatsiya, gradient, fluid tipografiya va h.k.). Ularning hammasi bir xil naqsh bilan ishlaydi β o'rnatasiz, keyin ulanasiz:
@import "tailwindcss";
@plugin "<plagin-nomi>";
/* sozlamali bo'lsa: */
@plugin "<plagin-nomi>" {
/* plagin hujjatida ko'rsatilgan opsiyalar */
}
β οΈ Uchinchi tomon plaginini qo'shishdan oldin uning v4 ni qo'llab-quvvatlashini tekshiring. Faqat v3 uchun yozilgan eski plagin (
plugins: []orqali ishlaydigan) v4 da ishlamasligi mumkin. Plagin README'sida "Tailwind v4" yoki@pluginko'rsatilgan bo'lsa β bexavotir.
21.7 CSS-first vs JS plagin β qaysi birini tanlash?¶
Endi muhim qaror. Sizga "Tailwind'ni kengaytirish" kerak bo'lsa, ikki yo'l bor:
- CSS-first β 19-bobda ko'rgan
@utility,@custom-variant, 18-bobdagi@theme. Bu β sof CSS, hech qanday paket, hech qanday JavaScript. - JS plagin β
@pluginorqali ulanadigan npm paketi.
Qoida sodda:
| Ehtiyoj | To'g'ri vosita |
|---|---|
Bir nechta o'z utility'ngiz (tab-4, content-auto) |
CSS-first β @utility (19-bob) |
O'z variantingiz (group-hover kabi) |
CSS-first β @custom-variant (19-bob) |
| Brend tokenlari, rang/spacing | CSS-first β @theme (18-bob) |
| Programmatik generatsiya (yuzlab klassni sikl bilan yasash) | JS plagin |
Mavjud ekotizim paketidan foydalanish (typography, forms, daisyUI) |
JS plagin β @plugin |
π‘ Soddacha qoida. Avval CSS-first'ni sinab ko'ring β aksariyat "kengaytirish" ehtiyojlari endi
@utility/@themebilan yopiladi va hech narsa o'rnatish kerak emas. JS@pluginga faqat ikki holatda murojaat qiling: (1) klasslarni dasturiy (sikl/funksiya bilan) generatsiya qilish kerak bo'lsa, (2) tayyor ekotizim paketini (typography, forms, daisyUI) ishlatmoqchi bo'lsangiz.
21.8 Komponent kutubxonalari β to'liq spektr¶
Endi o'quvchilar eng ko'p beradigan savolga keldik: "Tailwind bilan tayyor komponentlarni qayerdan olaman? btn, modal, dropdown ni har safar noldan yozmaslik kerakmi?"
Javob β bitta emas. Tailwind atrofida butun bir spektr bor: bir tomonda to'liq nazorat (sof utility), boshqa tomonda maksimal tezlik (tayyor klasslar). Mana shu spektrni tartib bilan ko'rib chiqamiz.
daisyUI β semantik komponent klasslari¶
daisyUI (v5) β Tailwind ustiga semantik komponent klasslari qo'shadigan plagin: btn, btn-primary, card, badge, modal, alert va boshqalar, hamda tayyor temalar. U ham oddiy @plugin bilan ulanadi:
<!-- Endi semantik klasslar bilan: -->
<button class="btn btn-primary">Saqlash</button>
<div class="card bg-base-100 shadow-xl">
<div class="card-body">
<h2 class="card-title">Karta sarlavhasi</h2>
<p>daisyUI komponenti β bir necha klass bilan.</p>
</div>
</div>
- Yutug'i: juda tez β
btn btn-primaryyozdingiz, tayyor tugma. Temalar bilan butun saytni bir qatorda qayta ranglash mumkin. - Kamchiligi: dizayn kamroq noyob bo'ladi (boshqa daisyUI saytlariga o'xshaydi), va bu β yana bitta qatlam (abstraksiya). Chuqur o'ziga xos dizayn kerak bo'lsa, baribir utility'ga qaytasiz.
Headless UI β a11y mantiq, uslub sizdan¶
Headless UI β React va Vue uchun uslubsiz, lekin to'liq qulay (accessible) interaktiv komponentlar: Menu (dropdown), Dialog (modal), Combobox, Listbox, Tabs. "Headless" (boshsiz) degani β u ko'rinish bermaydi, faqat murakkab mantiqni beradi: klaviatura navigatsiyasi, fokus boshqaruvi, ARIA atributlari, ochilish/yopilish holati.
Siz esa Tailwind utility'lari bilan ko'rinishini o'zingiz berasiz. Komponent holatini data-* atributlari orqali bildiradi, ularni 15-bobdagi data-* variantlari bilan uslublaysiz:
import { Menu } from '@headlessui/react'
<Menu>
<Menu.Button className="btn">Menyu</Menu.Button>
<Menu.Items className="rounded-lg bg-white shadow-lg p-1">
<Menu.Item>
{/* Headless UI holatni data-* bilan beradi, siz uslublaysiz */}
<a className="block px-3 py-2 rounded data-focus:bg-indigo-50">Tahrirlash</a>
</Menu.Item>
</Menu.Items>
</Menu>
- Yutug'i: a11y va klaviatura mantig'i (yozish juda qiyin va xatoga moyil qism) tayyor, dizayn esa to'liq sizniki.
- Kamchiligi: ko'rinishni baribir o'zingiz yozasiz β daisyUI'dan sekinroq, lekin noyobroq.
shadcn/ui β "o'rnatma, nusxa ol"¶
shadcn/ui β eng noodatdagi, lekin hozir eng mashhur yondashuv. U bog'liqlik (dependency) emas β siz uni npm install qilmaysiz. O'rniga, kerakli komponentning kodini (React + Tailwind + Radix) to'g'ridan-to'g'ri loyihangizga nusxa olasiz. Shundan keyin u sizning faylingiz β istalgancha tahrirlaysiz.
# komponent kodi loyihangizga ko'chiriladi (paket sifatida QO'SHILMAYDI)
npx shadcn@latest add button
Falsafa: "copy, don't install" (o'rnatma β nusxa ol). Nega? Chunki shunda komponent ustidan to'liq egalik sizda qoladi β versiya yangilanishi sizning dizayningizni buzmaydi, har bir piksel sizniki. (Ostida a11y uchun Radix UI primitivlari ishlaydi β Headless UI ga o'xshash g'oya.)
- Yutug'i: to'liq egalik + tayyor, chiroyli boshlang'ich + a11y. React loyihalari uchun juda kuchli.
- Kamchiligi: faqat React; va kod sizniki bo'lgani uchun uni boqish ham sizning zimmangizda.
Flowbite, Preline, Tailwind Plus¶
Bulardan tashqari tayyor HTML komponent to'plamlari bor:
- Flowbite, Preline β Tailwind utility'lari bilan yozilgan tayyor HTML komponentlar/bloklar (nusxa-joylash uslubida; ba'zilari JS bilan).
- Tailwind Plus (avvalgi Tailwind UI) β Tailwind'ning rasmiy, pullik komponent va shablon to'plami.
21.9 Qaysi birini tanlayman? β qisqa yo'riqnoma¶
| Maqsadingiz | Tavsiya |
|---|---|
| O'rganish / to'liq nazorat kerak | Sof utility'lar (bu kitobning asosiy yo'li) |
| Tez yetkazib berish (MVP, ichki panel) | daisyUI yoki Flowbite β semantik klasslar |
| React ilova + a11y + egalik | shadcn/ui + Headless UI |
| Faqat interaktiv mantiq (dropdown/modal), dizayn o'zimniki | Headless UI |
| O'z dizayn tizimingiz, hech kimga o'xshamasin | Sof utility + @theme (18-bob) + @utility (19-bob) |
π‘ Eng keng tarqalgan amaliy yo'l: utility'ni puxta o'rganing (shunda har qanday kutubxona kodini tushunasiz va sozlay olasiz), keyin loyiha tezligi kerak bo'lganda daisyUI yoki shadcn/ui ni utility ustiga qo'shing. Kutubxona β utility o'rnini bosmaydi, uning ustiga quriladi.
21.10 Amaliy misol β typography + forms + daisyUI bir loyihada¶
Endi hammasini bitta app.css da birlashtiramiz: ikki rasmiy plagin va daisyUI:
@import "tailwindcss";
/* Rasmiy plaginlar */
@plugin "@tailwindcss/typography";
@plugin "@tailwindcss/forms";
/* Komponent kutubxonasi */
@plugin "daisyui";
/* O'z brend tokenlaringiz baribir @theme'da (18-bob) */
@theme {
--color-brand-600: oklch(0.53 0.20 265);
}
Endi uch xil ehtiyoj β boy matn, forma, tayyor tugma β bir sahifada yonma-yon:
<!-- 1. Boy matn β typography plagini -->
<article class="prose lg:prose-lg dark:prose-invert">
<h1>Maqola sarlavhasi</h1>
<p>Bu matn prose bilan o'z-o'zidan uslublanadi.</p>
</article>
<!-- 2. Forma β forms plagini -->
<input type="email" placeholder="Email"
class="border border-slate-300 rounded-lg px-3 py-2
focus:ring-2 focus:ring-brand-600" />
<!-- 3. Tayyor tugma β daisyUI -->
<button class="btn btn-primary">Yuborish</button>
E'tibor bering β uchchala plagin ham bitta @plugin qatori bilan ulandi, va ularning hammasi sizning @theme tokenlaringiz bilan birga yashaydi. Plagin β Tailwind'ning o'rnini bosmaydi, uni boyitadi.
21.11 Tez-tez uchraydigan xatolar¶
- v3-da-yadroga-ko'chgan plaginni o'rnatish.
@tailwindcss/aspect-ratio,@tailwindcss/container-queries,@tailwindcss/line-clampβ bular v4 da allaqachon yadroda. O'rnatish ortiqcha va chalkash. - Plaginni config'da izlash. v4 da
plugins: []massivi yo'q β plagin CSS ichida@pluginbilan ulanadi. JS config'ga yozsangiz, hech narsa bo'lmaydi. proseni ilova UI'siga qo'yish.proseboy matn uchun; tugma, navbar, kartaga qo'ysangiz, u dizayningiz bilan urishadi. Kerakli qismninot-prosebilan ajrating yoki umumanproseishlatmang.formsplaginisiz inputni uslublashga urinish. Plaginsiz brauzerning ichki stiliborder/focus:ringni qisman bekor qiladi. Avval@plugin "@tailwindcss/forms";.- Komponent kutubxonasiga haddan ortiq tayanish. daisyUI tez, lekin hamma narsani
btn/cardbilan qilsangiz, dizayn nazorati va o'ziga xoslik yo'qoladi. Kutubxona β utility ustiga, uning o'rniga emas. @pluginni@importdan oldin yozish. Avval@import "tailwindcss";, keyin@plugin "...";. Tartibni teskari qilsangiz, plagin ulanmasligi mumkin.
π Oldinga qarash. Plaginlar ekotizimini va komponent kutubxonalari spektrini ko'rdingiz. Keyingi bobda bu g'oyalarni amalga β komponentlarni qayta ishlatish naqshlari va React/Vue/Svelte kabi frameworklar bilan integratsiya β qo'llaymiz. Forma plaginini esa to'liq amalda 23-bobda ko'rasiz.
Mashqlar¶
1-mashq. Bir hamkasbingiz loyihaga @tailwindcss/aspect-ratio ni o'rnatib, aspect-video ishlamayotganidan shikoyat qilmoqda (xato yo'q, lekin "ortiqcha bog'liqlik" ogohlantirishi bor). Muammo va to'g'ri yo'l nima?
Yechim
@tailwindcss/aspect-ratio β v3 plagini. v4 da aspect-ratio funksiyasi yadroga ko'chirilgan, shuning uchun aspect-video, aspect-square, aspect-[4/3] o'rnatishsiz ishlaydi. To'g'ri yo'l β plaginni o'chirib tashlash:
va CSS'dagi @plugin (yoki v3 config'dagi require) qatorini olib tashlash. aspect-video baribir ishlayveradi.
2-mashq. Blog sahifangizda markdown'dan kelgan maqola HTML'i bor (<h2>, <p>, <ul> ... β siz klasslarini boshqarmaysiz). Uni chiroyli, kattaroq matnli va dark-mode'ga mos qiling. Qaysi plagin va qanday klasslar?
Yechim
@tailwindcss/typography plagini:
<article class="prose prose-lg dark:prose-invert">
<!-- markdown'dan kelgan h2/p/ul ... avtomatik uslublanadi -->
</article>
prose β asosiy uslub, prose-lg β kattaroq, dark:prose-invert β dark rejimda teskari rang. Ichki teglarga bitta ham klass yozmaysiz.
3-mashq. <input> ga border border-slate-300 rounded-lg focus:ring-2 yozdingiz, lekin natija xunuk va focus:ring ko'rinmayapti. Sababi nima, qanday tuzatasiz?
Yechim
Brauzerning standart forma stili sizning utility'laringizni qisman bekor qilmoqda. Yechim β @tailwindcss/forms plaginini ulash, u inputlarga toza, uslublasa bo'ladigan asos beradi:
Shundan keyin border, rounded-lg, focus:ring-2 to'liq ishlaydi. Mavjud loyihada eski stillarni buzmaslik uchun @plugin "@tailwindcss/forms" { strategy: class; } bilan faqat form-input klassli elementlarga ham qo'llash mumkin.
4-mashq. prose bilan uslublangan maqola ichida bitta interaktiv "narx kalkulyatori" bloki bor β u prose uslubiga bo'ysunmasligi, o'z dizaynida qolishi kerak. Qanday qilasiz?
Yechim
Shu blokni not-prose bilan o'rab qo'yasiz β prose uslubi u yerga tegmaydi:
5-mashq. Sizga "o'z utility'm kerak: content-auto deb content-visibility: auto; qo'yadigan klass". Buning uchun JS plagin yozasizmi yoki boshqa yo'l bormi? Qaysi vosita to'g'ri va nega?
Yechim
JS plagin kerak emas β bu oddiy, bitta utility, shuning uchun 19-bobdagi CSS-first @utility to'g'ri vosita:
Qoida: o'z utility/variant kerak bo'lsa β avval @utility/@custom-variant (sof CSS, hech narsa o'rnatmaysiz). JS @plugin ga faqat dasturiy generatsiya yoki tayyor ekotizim paketi kerak bo'lganda murojaat qilasiz.
6-mashq (qaror). Bir React loyihada accessible dropdown menyu kerak β klaviatura navigatsiyasi va ARIA to'g'ri bo'lsin, lekin dizayn to'liq sizniki, hech kimga o'xshamasin. Spektrning qaysi yechimini tanlaysiz va nega aynan uni emas, daisyUI'ni emas?
Yechim
Headless UI (yoki shadcn/ui, u ostida Radix ishlatadi). Sabab:
- Headless UI murakkab a11y/klaviatura mantig'ini beradi, lekin uslub bermaydi β demak dizayn to'liq sizniki, Tailwind utility bilan
data-focus:/data-open:(15-bob) orqali yozasiz. - daisyUI'ni emas, chunki uning
dropdownklassi tayyor ko'rinish (dizayn) ham olib keladi β "hech kimga o'xshamasin" talabiga ziyon, va u a11y/klaviatura mantig'ining bir qismini bermaydi.
Ya'ni: a11y mantiq tayyor + ko'rinish sizniki kerak bo'lsa β Headless UI. Tezlik va tayyor ko'rinish kerak bo'lsa β daisyUI.
β¬ οΈ Oldingi: 20 β Direktiva va funksiyalar Β· π README Β· Keyingi: 22 β Komponentlar va framework integratsiyasi β‘οΈ