Tailwind CSS variantlari bo'yicha keng qamrovli qo'llanmamiz yordamida interaktiv UI'larning to'liq salohiyatini oching. Pseudo-sinf, holat, guruh va peer stilizatsiyasini o'rganing.
Tailwind CSS Variantlarini O'zlashtirish: Pseudo-Sinflar va Holat Stilizatsiyasiga Chuqur Kirish
Zamonaviy veb-dasturlashda nafaqat vizual jozibador, balki dinamik va foydalanuvchi harakatlariga javob beradigan interfeyslarni yaratish juda muhimdir. Aynan shu yerda Tailwind CSS kabi utility-first freymvorkining haqiqiy kuchi namoyon bo'ladi. Uning yordamchi sinflari "nima"โaniq stil qoidasini qo'llashni ta'minlasa, uning variantlari esa muhim "qachon"ni ta'minlaydi.
Variantlar statik dizaynlarni interaktiv tajribalarga aylantiradigan sirli "sous"dir. Ular elementning holati, foydalanuvchi o'zaro ta'sirlari yoki hatto boshqa elementning holatiga qarab yordamchi sinflarni shartli ravishda qo'llashga imkon beruvchi maxsus prefikslardir. Tugmani sichqoncha bilan bosganda rangini o'zgartirish, fokus holatidagi forma kiritish maydonini stilizatsiya qilish yoki katakcha belgilanganda xabarni ko'rsatish bo'ladimi, variantlar bu ishlar uchun mo'ljallangan vositalardir.
Ushbu keng qamrovli qo'llanma butun dunyodagi dasturchilar uchun mo'ljallangan. Biz Tailwind CSS variantlarining to'liq spektrini, hover
va focus
kabi fundamental pseudo-sinflardan tortib, murakkab komponentlar o'zaro ta'siri uchun group
va peer
dan foydalanishning ilg'or texnikalarigacha o'rganib chiqamiz. Oxir-oqibat, siz to'liq HTML ichida murakkab, holatga sezgir interfeyslarni yaratish uchun bilimga ega bo'lasiz.
Asosiy Konsepsiyani Tushunish: Variantlar Nima?
Aslini olganda, Tailwind CSS'dagi variant bu yordamchi sinfga ikki nuqta (:
) bilan ajratilgan holda qo'shiladigan prefiksdir. Ushbu prefiks shart vazifasini bajaradi. Undan keyingi yordamchi sinf faqat shu shart bajarilganda qo'llaniladi.
Asosiy sintaksis sodda va intuitivdir:
variant:utility-class
Masalan, oddiy tugmani ko'rib chiqaylik. Siz uning foni standart holatda ko'k bo'lishini, lekin foydalanuvchi sichqonchani uning ustiga olib kelganda to'qroq ko'k bo'lishini xohlashingiz mumkin. An'anaviy CSS'da siz shunday yozgan bo'lar edingiz:
.my-button {
background-color: #3b82f6; /* bg-blue-500 */
}
.my-button:hover {
background-color: #2563eb; /* bg-blue-700 */
}
Tailwind variantlari yordamida siz xuddi shu natijaga to'g'ridan-to'g'ri HTML'ingizda erishasiz va stilizatsiyangizni belgilash (markup) bilan bir joyda saqlaysiz:
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
Meni bosing
</button>
Bu yerda hover:
- bu variant. U Tailwind'ning Just-In-Time (JIT) mexanizmiga tugma :hover
holatida bo'lgandagina bg-blue-700
ni qo'llaydigan CSS qoidasini yaratishni buyuradi. Ushbu oddiy, ammo kuchli konsepsiya Tailwind CSS'dagi barcha interaktiv stilizatsiya uchun asos bo'lib xizmat qiladi.
Eng Keng Tarqalgan Variantlar: Interaktiv Pseudo-Sinflar
Pseudo-sinflar - bu elementning maxsus holatini belgilaydigan CSS selektorlaridir. Tailwind foydalanuvchi harakatlariga javob berish uchun siz har kuni ishlatadigan barcha keng tarqalgan pseudo-sinflar uchun variantlarni taqdim etadi.
hover
Varianti: Sichqoncha Kursorlariga Javob Berish
hover
varianti, ehtimol, eng ko'p ishlatiladigan variantdir. U foydalanuvchi kursori element ustida turganida stillarni qo'llaydi. Bu havolalar, tugmalar, kartochkalar va boshqa bosiladigan elementlarda vizual qayta aloqani ta'minlash uchun zarur.
Misol: Interaktiv kartochka komponenti
Keling, sichqoncha ustiga olib kelinganda yuqoriga ko'tariladigan va ko'proq soya oladigan kartochka yaratamiz, bu zamonaviy UI dizaynidagi keng tarqalgan naqshdir.
<div class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-md
transition-all duration-300
hover:shadow-xl hover:-translate-y-1">
<h3 class="text-xl font-medium text-black">Global Tushunchalar</h3>
<p class="text-slate-500">Dunyo bo'ylab tendensiyalarni kashf eting.</p>
</div>
Ushbu misolda:
hover:shadow-xl
sichqoncha ustiga olib kelinganda box-shadow'ni kattaroq qiladi.hover:-translate-y-1
kartochkani biroz yuqoriga siljitib, "ko'tarilish" effektini yaratadi.- Holat o'zgarishini silliq va animatsion qilish uchun
transition-all
vaduration-300
qo'shdik.
focus
Varianti: Qulaylik va Kiritish Uchun Stilizatsiya
focus
varianti qulaylik (accessibility) uchun juda muhim. U element sichqoncha bilan bosilganda yoki klaviatura yordamida (masalan, 'Tab' tugmasi bilan) unga o'tilganda stillarni qo'llaydi. U ko'pincha input, textarea va tugmalar kabi forma elementlarida ishlatiladi.
Misol: Yaxshi stilizatsiya qilingan forma kiritish maydoni
Aniq fokus holati foydalanuvchilarga sahifada aynan qayerda ekanligini aytadi, bu faqat klaviatura orqali navigatsiya qilish uchun juda muhimdir.
<label for="email" class="block text-sm font-medium text-gray-700">Email Manzil</label>
<input type="email" id="email"
class="mt-1 block w-full px-3 py-2 bg-white border border-slate-300 rounded-md
text-sm shadow-sm placeholder-slate-400
focus:outline-none focus:border-sky-500 focus:ring-1 focus:ring-sky-500">
Bu yerda focus:
variantlari nima qiladi:
focus:outline-none
: Brauzerning standart fokus konturini olib tashlaydi. Buni o'zimizning vizual jihatdan jozibadorroq stilimiz bilan almashtirish uchun qilamiz.focus:border-sky-500
: Chegara rangini yorqin osmon rangiga o'zgartiradi.focus:ring-1 focus:ring-sky-500
: Xuddi shu rangdagi nozik tashqi yorug'lik (box-shadow halqasi) qo'shib, fokus holatini yanada yaqqolroq qiladi.
active
Varianti: Bosishlar va Tegishlarni Qayd Etish
active
varianti element foydalanuvchi tomonidan faollashtirilayotganda โ masalan, tugma bosib turilgan vaqtda qo'llaniladi. U bosish yoki tegish ro'yxatga olinganligi haqida darhol fikr-mulohaza bildiradi.
Misol: "Bosilgan" effektli tugma
<button class="bg-indigo-500 text-white font-semibold py-2 px-4 rounded-lg
shadow-md hover:bg-indigo-600 focus:outline-none
focus:ring-2 focus:ring-indigo-400 focus:ring-opacity-75
active:bg-indigo-700 active:translate-y-0.5">
Yuborish
</button>
Ushbu takomillashtirilgan tugmada:
active:bg-indigo-700
tugma bosib turilganda uni yanada to'qroq qiladi.active:translate-y-0.5
tugmani biroz pastga itarib, jismoniy bosish effektini yaratadi.
Boshqa Interaktiv Variantlar: focus-within
va focus-visible
focus-within
: Ushbu foydali variant ota-ona elementga uning ichidagi birorta element fokus olganda stillarni qo'llaydi. Bu foydalanuvchi o'zining kiritish maydoni bilan ishlayotganda butun forma guruhini stilizatsiya qilish uchun juda mos keladi.
<div class="flex items-center space-x-2 p-4 border rounded-lg focus-within:border-blue-500 focus-within:ring-1 focus-within:ring-blue-500">
<!-- SVG Ikona -->
<svg class="h-6 w-6 text-gray-400">...</svg>
<input type="text" placeholder="Qidirish..." class="outline-none">
</div>
Endi, foydalanuvchi <input>
ga fokus berganda, butun ota-ona <div>
ko'k chegara va halqaga ega bo'ladi.
focus-visible
: Brauzerlar fokus halqasini qachon ko'rsatish bo'yicha turli xil evristikalarga ega. Masalan, ular sichqoncha bilan bosgandan keyin tugmada uni ko'rsatmasligi mumkin, lekin klaviatura navigatsiyasidan keyin ko'rsatadi. focus-visible
varianti sizga ushbu aqlliroq xatti-harakatdan foydalanish imkonini beradi. Odatda, ham sichqoncha, ham klaviatura foydalanuvchilari uchun yaxshiroq foydalanuvchi tajribasini ta'minlash uchun kontur/halqa stilizatsiyasi uchun focus
o'rniga focus-visible
dan foydalanish tavsiya etiladi.
Holatga Asoslangan Stilizatsiya: Forma va UI Elementlari Variantlari
To'g'ridan-to'g'ri foydalanuvchi o'zaro ta'siridan tashqari, elementlar ko'pincha o'zlarining atributlariga asoslangan holatlarga ega bo'ladi. Tailwind bu holatlarni deklarativ ravishda stilizatsiya qilish uchun variantlarni taqdim etadi.
disabled
Varianti: Mavjud Emasligini Bildirish
Tugma yoki forma kiritish maydoni disabled
atributiga ega bo'lsa, u bilan o'zaro aloqada bo'lish mumkin emas. disabled
varianti foydalanuvchiga buni vizual ravishda aniq ko'rsatish uchun ushbu holatni stilizatsiya qilishga imkon beradi.
<button disabled class="bg-slate-300 text-slate-500 font-bold py-2 px-4 rounded cursor-not-allowed
disabled:opacity-50">
Qayta ishlanmoqda...
</button>
Bu yerda disabled:opacity-50
disabled
atributi mavjud bo'lganda tugma shaffofligini pasaytiradi, bu nofaol holatni ko'rsatish uchun keng tarqalgan usul. cursor-not-allowed
yordamchi klassi buni yanada kuchaytiradi.
checked
Varianti: Belgilash Qutilari va Radio Tugmalar Uchun
checked
varianti maxsus belgilash qutilari va radio tugmalarini yaratish uchun zarur. U kiritish maydonining checked
atributi 'true' bo'lganda stillarni qo'llaydi.
Misol: Maxsus stilizatsiya qilingan belgilash qutisi
<label class="flex items-center space-x-3">
<input type="checkbox" class="appearance-none h-5 w-5 border border-gray-300 rounded-md
checked:bg-blue-600 checked:border-transparent">
<span class="text-gray-900 font-medium">Foydalanish shartlarini qabul qilaman</span>
</label>
Biz brauzerning standart stilini olib tashlash uchun appearance-none
dan foydalanamiz, so'ngra quti belgilanganda fon rangini o'zgartirish uchun checked:
variantidan foydalanamiz. Ushbu variant bilan birlashtirilgan ::before
yoki ::after
pseudo-elementlari yordamida hatto belgi ikonasini ham qo'shishingiz mumkin.
Forma Validatsiya Variantlari: required
, optional
, valid
, invalid
Zamonaviy formalar real vaqt rejimida validatsiya haqida fikr-mulohaza beradi. Tailwind'ning validatsiya variantlari brauzerning cheklovlarni tekshirish API'siga tayanadi. Ushbu variantlar required
kabi atributlarga va kiritilgan qiymatning joriy haqiqiylik holatiga (masalan, type="email"
uchun) qarab qo'llaniladi.
<input type="email" required
class="border rounded-md px-3 py-2
invalid:border-pink-500 invalid:text-pink-600
focus:invalid:border-pink-500 focus:invalid:ring-pink-500
valid:border-green-500">
Ushbu kiritish maydoni quyidagicha bo'ladi:
- Agar tarkib yaroqli email manzili bo'lmasa (
invalid:
), pushti chegara va matnga ega bo'ladi. - Yaroqli email manzili kiritilgandan so'ng (
valid:
), yashil chegaraga ega bo'ladi. - Maydon yaroqsiz holatda fokuslangan bo'lsa (
focus:invalid:
), fokus halqasi ham pushti rangga aylanadi.
Ilg'or Interaktivlik: `group` va `peer` Variantlari
Ba'zan, siz elementni *boshqa* elementning holatiga qarab stilizatsiya qilishingiz kerak bo'ladi. Aynan shu yerda kuchli group
va peer
konsepsiyalari ishga tushadi. Ular ilgari faqat yordamchi sinflar bilan hal qilish qiyin bo'lgan butun bir UI muammolari sinfini hal qiladi.
`group`ning Kuchi: Ota-ona Holatiga Ko'ra Ichki Elementlarni Stilizatsiya Qilish
group
varianti ota-ona element holatiga qarab ichki elementlarni stilizatsiya qilish imkonini beradi. Uni ishlatish uchun siz kuzatmoqchi bo'lgan ota-ona elementga group
sinfini qo'shasiz. Keyin, har qanday ichki elementda siz group-hover
, group-focus
va hokazo kabi variantlardan foydalanishingiz mumkin.
Misol: Sichqoncha ustiga olib kelinganda sarlavha va ikonkaning rangi birgalikda o'zgaradigan kartochka
<a href="#" class="group block max-w-xs mx-auto rounded-lg p-6 bg-white ring-1 ring-slate-900/5 shadow-lg space-y-3
hover:bg-sky-500 hover:ring-sky-500">
<div class="flex items-center space-x-3">
<!-- SVG Ikona -->
<svg class="h-6 w-6 stroke-sky-500 group-hover:stroke-white">...</svg>
<h3 class="text-slate-900 group-hover:text-white text-sm font-semibold">Yangi Loyiha</h3>
</div>
<p class="text-slate-500 group-hover:text-white text-sm">Turli andozalardan yangi loyiha yarating.</p>
</a>
Bu qanday ishlaydi:
- Biz ota-ona
<a>
tegigagroup
sinfini qo'shamiz. - Foydalanuvchi butun havola ustiga sichqonchani olib kelganda, uning fon rangi
hover:bg-sky-500
tufayli o'zgaradi. - Bir vaqtning o'zida, SVG'dagi
group-hover:stroke-white
sinfi va matndagigroup-hover:text-white
sinfi faollashadi, ularning ranglarini oq rangga o'zgartiradi.
Bu, aks holda maxsus CSS yoki JavaScript talab qiladigan yaxlit, bir butun hover effektini yaratadi.
Yonma-yon Elementlarni Stilizatsiya qilish `peer` bilan: Formalar Uchun O'yinni O'zgartiruvchi Vosita
peer
varianti group
ga o'xshaydi, lekin u yonma-yon (sibling) elementlarni stilizatsiya qilish uchun ishlaydi. Siz elementga peer
sinfini qo'shasiz, so'ngra "peer" holatiga qarab *keyingi* yonma-yon elementlarda peer-checked
yoki peer-invalid
kabi variantlardan foydalanishingiz mumkin. Bu maxsus forma elementlari uchun nihoyatda foydali.
Misol: Tegishli belgilash qutisi belgilanganda o'zgaradigan yorliq
<label class="relative inline-flex items-center cursor-pointer">
<input type="checkbox" class="sr-only peer">
<div class="w-11 h-6 bg-gray-200 rounded-full
peer-focus:ring-4 peer-focus:ring-blue-300
peer-checked:after:translate-x-full peer-checked:after:border-white
after:content-[''] after:absolute after:top-0.5 after:left-[2px]
after:bg-white after:border-gray-300 after:border after:rounded-full
after:h-5 after:w-5 after:transition-all
peer-checked:bg-blue-600"></div>
<span class="ml-3 text-sm font-medium text-gray-900 peer-checked:text-blue-600">
Bildirishnomalarni yoqish
</span>
</label>
Bu nol JavaScript bilan qurilgan to'liq, qulay o'chirib-yoqish tugmasi!
- Haqiqiy
<input>
katakchasisr-only
bilan vizual ravishda yashiringan (u hali ham ekran o'quvchilari uchun mavjud) vapeer
sifatida belgilangan. - Vizual o'chirib-yoqish tugmasi bu
<div>
bo'lib, u tutqichli yo'lakcha (::after
pseudo-elementi yordamida) kabi stilizatsiya qilingan. peer-checked:bg-blue-600
yashirin katakcha belgilanganda yo'lakchaning fon rangini o'zgartiradi.peer-checked:after:translate-x-full
katakcha belgilanganda tutqichni o'ngga suradi.peer-checked:text-blue-600
yonma-yon<span>
yorlig'i matnining rangini o'zgartiradi.
Aniq Nazorat Uchun Variantlarni Birlashtirish
Tailwind'ning eng kuchli xususiyatlaridan biri variantlarni bir-biriga zanjir qilish qobiliyatidir. Bu juda aniq shartli stillarni yaratishga imkon beradi.
Moslashuvchan va Holat Variantlari: Dinamik Duet
Siz moslashuvchan prefikslarni (md:
, lg:
kabi) holat variantlari bilan birlashtirib, stillarni faqat ma'lum ekran o'lchamlarida *va* ma'lum holatlarda qo'llashingiz mumkin. Moslashuvchan variant har doim birinchi keladi.
Sintaksis: breakpoint:state:utility-class
<button class="bg-blue-500 text-white p-2 rounded
hover:bg-blue-600
md:bg-green-500 md:hover:bg-green-600">
Moslashuvchan Tugma
</button>
Ushbu tugma quyidagicha bo'ladi:
- Kichik ekranlarda ko'k rangda bo'lib, hover holatida to'qroq ko'k rangga aylanadi.
- O'rta ekranlarda va undan kattalarida yashil (
md:bg-green-500
) bo'lib, hover holatida to'qroq yashilga (md:hover:bg-green-600
) aylanadi.
Bir Nechta Holat Variantlarini Biriktirish
Siz, shuningdek, stillarni faqat barcha shartlar bajarilganda qo'llash uchun bir nechta holat variantlarini biriktirishingiz mumkin. Bu o'zaro ta'sirlarni nozik sozlash uchun foydali.
Misol: Hover va focus holatlariga turlicha javob beradigan qorong'u rejim tugmasi
<button class="p-2 rounded-full text-gray-400
dark:text-gray-500
hover:text-gray-600 dark:hover:text-gray-300
focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-gray-500
dark:focus:ring-offset-gray-900 dark:focus:ring-gray-400
dark:hover:focus:ring-gray-200">
<!-- Ikona shu yerda -->
</button>
Bu yerda dark:hover:focus:ring-gray-200
ma'lum bir halqa rangini faqat qorong'u rejim yoqilgan, tugma ustiga sichqoncha olib kelingan *va* u fokusda bo'lganda qo'llaydi. Holat variantlarining tartibi odatda muhim emas, chunki Tailwind kombinatsiya uchun to'g'ri CSS selektorini yaratadi.
Moslashtirish va Yakkahol Islatishlar
Tailwind standart holatda keng qamrovli variantlar to'plamini taqdim etsa-da, ba'zida sizga ko'proq nazorat kerak bo'ladi.
Ixtiyoriy Variantlardan Foydalanish
O'rnatilgan variant bilan qamrab olinmagan CSS selektoriga muhtoj bo'lgan bir martalik holatlar uchun siz ixtiyoriy variantlardan foydalanishingiz mumkin. Bu sizga maxsus selektorlarni to'g'ridan-to'g'ri sinf atributingizda, kvadrat qavslar ichida yozish imkonini beruvchi nihoyatda kuchli yechimdir.
Misol: Ro'yxat elementlarini har xil stilizatsiya qilish
<ul>
<li class="[&:nth-child(odd)]:bg-gray-100 p-2">Birinchi element</li>
<li class="[&:nth-child(odd)]:bg-gray-100 p-2">Ikkinchi element</li>
<li class="[&:nth-child(odd)]:bg-gray-100 p-2">Uchinchi element</li>
</ul>
[&:nth-child(odd)]:bg-gray-100
sinfi li:nth-child(odd)
uchun CSS yaratadi, bu esa har bir elementga qo'shimcha sinflar qo'shmasdan chiziqli ro'yxatni yaratadi.
Yana bir keng tarqalgan foydalanish to'g'ridan-to'g'ri avlodlarni stilizatsiya qilishdir:
<div class="[&_>_p]:mt-4">
<p>Birinchi paragraf.</p>
<p>Ikkinchi paragraf. Bunga yuqoridan margin beriladi.</p>
<div><p>Ichki paragraf. Bunga yuqoridan margin berilmaydi.</p></div>
</div>
[&_>_p]:mt-4
sinfi faqat div'ning to'g'ridan-to'g'ri `p` avlodlarini stilizatsiya qiladi.
`tailwind.config.js` da Variantlarni Sozlash
Standart holatda, Tailwind'ning JIT mexanizmi barcha asosiy plaginlar uchun barcha variantlarni yoqadi. Biroq, agar siz uchinchi tomon plaginlari uchun variantlarni yoqishingiz yoki maxsus variantni ro'yxatdan o'tkazishingiz kerak bo'lsa, siz `tailwind.config.js` faylingizdan foydalanishingiz kerak bo'ladi.
// tailwind.config.js
module.exports = {
// ...
plugins: [
function({ addVariant }) {
addVariant('child', '& > *');
addVariant('child-hover', '& > *:hover');
}
],
}
Ushbu maxsus plagin yangi `child` va `child-hover` variantlarini qo'shadi, keyinchalik siz ularni elementning barcha to'g'ridan-to'g'ri avlodlarini stilizatsiya qilish uchun child:text-red-500
kabi ishlatishingiz mumkin.
Xulosa: Holatga Asoslangan UI Kuchi
Tailwind CSS variantlari shunchaki qulaylik emas; ular utility-first falsafasining fundamental qismidir. Elementning barcha potentsial holatlaridagi ko'rinishini to'g'ridan-to'g'ri HTML'da tasvirlashga imkon berish orqali variantlar sizga murakkab, mustahkam va yuqori darajada qo'llab-quvvatlanadigan foydalanuvchi interfeyslarini yaratishga yordam beradi.
Oddiy hover
effektlaridan tortib, peer-checked
bilan qurilgan murakkab forma boshqaruvlarigacha va moslashuvchan, ko'p holatli kombinatsiyalargacha, endi siz o'z dizaynlaringizni hayotga tatbiq etish uchun keng qamrovli vositalar to'plamiga egasiz. Ular barcha mantiq โ tuzilma, stil va holat โ bir joyda jamlangan komponentga asoslangan fikrlash tarzini rag'batlantiradi.
Biz asoslarni ko'rib chiqdik va ilg'or texnikalarni o'rgandik, lekin sayohat shu bilan tugamaydi. Variantlarni o'zlashtirishning eng yaxshi usuli - ulardan foydalanish. Ularni birlashtirib tajriba qiling, rasmiy Tailwind CSS hujjatlarida to'liq ro'yxatni o'rganing va maxsus CSS yoki JavaScript'ga murojaat qilmasdan interaktiv komponentlarni yaratishga o'zingizni chorlang. Holatga asoslangan stilizatsiya kuchini o'zlashtirib, siz global auditoriya uchun tezroq, izchilroq va yoqimliroq foydalanuvchi tajribalarini yarata olasiz.