Hyödynnä interaktiivisten käyttöliittymien koko potentiaali kattavalla oppaallamme Tailwind CSS -variantteihin. Opi pseudoluokkien, tilojen, ryhmien ja vertaisten muotoilu.
Tailwind CSS -varianttien hallinta: Syväsukellus pseudoluokkiin ja tilapohjaiseen muotoiluun
Nykyaikaisessa web-kehityksessä on ensisijaisen tärkeää luoda käyttöliittymiä, jotka eivät ole ainoastaan visuaalisesti miellyttäviä, vaan myös dynaamisia ja reagoivat käyttäjän vuorovaikutukseen. Tässä kohtaa Tailwind CSS:n kaltaisen utility-first-kehyksen todellinen voima pääsee loistamaan. Vaikka sen apuluokat tarjoavat "mitä" – tietyn sovellettavan tyylisäännön – sen variantit tarjoavat ratkaisevan "milloin".
Variantit ovat salainen ainesosa, joka muuttaa staattiset suunnitelmat interaktiivisiksi kokemuksiksi. Ne ovat erityisiä etuliitteitä, joiden avulla voit soveltaa apuluokkia ehdollisesti elementin tilan, käyttäjän vuorovaikutuksen tai jopa toisen elementin tilan perusteella. Olipa kyseessä painikkeen värin muuttaminen hover-tilassa, lomakekentän muotoilu sen ollessa fokusoituna tai viestin näyttäminen, kun valintaruutu on valittuna, variantit ovat oikeat työkalut tähän tehtävään.
Tämä kattava opas on suunniteltu kehittäjille maailmanlaajuisesti. Tutustumme Tailwind CSS -varianttien koko kirjoon, peruspseudoluokista kuten hover
ja focus
aina edistyneisiin tekniikoihin, joissa käytetään group
- ja peer
-variantteja monimutkaisiin komponenttivuorovaikutuksiin. Tämän oppaan jälkeen sinulla on tiedot rakentaa hienostuneita, tilatietoisia käyttöliittymiä täysin HTML:n sisällä.
Ydinajatuksen ymmärtäminen: Mitä variantit ovat?
Ytimessään variantti Tailwind CSS:ssä on etuliite, jonka lisäät apuluokkaan kaksoispisteellä (:
) erotettuna. Tämä etuliite toimii ehtona. Sen edeltämä apuluokka otetaan käyttöön vain, kun kyseinen ehto täyttyy.
Perussyntaksi on yksinkertainen ja intuitiivinen:
variantti:apuluokka
Tarkastellaan esimerkiksi yksinkertaista painiketta. Haluat ehkä sen taustan olevan oletusarvoisesti sininen, mutta tummempi sininen, kun käyttäjä vie hiiren sen päälle. Perinteisessä CSS:ssä kirjoittaisit:
.my-button {
background-color: #3b82f6; /* bg-blue-500 */
}
.my-button:hover {
background-color: #2563eb; /* bg-blue-700 */
}
Tailwindin varianttien avulla saavutat saman tuloksen suoraan HTML:ssäsi, pitäen muotoilun yhdessä markup-koodin kanssa:
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
Paina minua
</button>
Tässä hover:
on variantti. Se kertoo Tailwindin Just-In-Time (JIT) -moottorille, että sen tulee luoda CSS-sääntö, joka soveltaa bg-blue-700
-luokkaa vain, kun painike on :hover
-tilassa. Tämä yksinkertainen mutta tehokas konsepti on kaiken interaktiivisen muotoilun perusta Tailwind CSS:ssä.
Yleisimmät variantit: Interaktiiviset pseudoluokat
Pseudoluokat ovat CSS-valitsimia, jotka määrittelevät elementin erityisen tilan. Tailwind tarjoaa variantit kaikille yleisimmille pseudoluokille, joita käytät päivittäin vastataksesi käyttäjän toimiin.
hover
-variantti: Reagointi hiiren kursoriin
hover
-variantti on luultavasti useimmin käytetty. Se soveltaa tyylejä, kun käyttäjän kursori on elementin päällä. Se on olennainen visuaalisen palautteen antamisessa linkeille, painikkeille, korteille ja muille klikattaville elementeille.
Esimerkki: Interaktiivinen korttikomponentti
Luodaan kortti, joka nousee ja saa voimakkaamman varjon, kun sen päälle viedään hiiri – yleinen malli modernissa käyttöliittymäsuunnittelussa.
<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">Globaalit näkemykset</h3>
<p class="text-slate-500">Löydä trendejä ympäri maailmaa.</p>
</div>
Tässä esimerkissä:
hover:shadow-xl
muuttaa laatikon varjon suuremmaksi hover-tilassa.hover:-translate-y-1
siirtää korttia hieman ylöspäin, luoden "nousevan" vaikutelman.- Lisäsimme
transition-all
jaduration-300
, jotta tilanmuutos olisi pehmeä ja animoitu.
focus
-variantti: Muotoilu saavutettavuutta ja syötteitä varten
focus
-variantti on kriittinen saavutettavuuden kannalta. Se soveltaa tyylejä, kun elementti on valittuna, joko klikkaamalla sitä hiirellä tai navigoimalla siihen näppäimistöllä (esim. 'Tab'-näppäimellä). Sitä käytetään yleisimmin lomake-elementeissä, kuten syötekentissä, tekstialueissa ja painikkeissa.
Esimerkki: Hyvin muotoiltu lomakekenttä
Selkeä fokus-tila kertoo käyttäjille tarkalleen, missä he ovat sivulla, mikä on elintärkeää vain näppäimistöllä navigoinnissa.
<label for="email" class="block text-sm font-medium text-gray-700">Sähköpostiosoite</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">
Tässä on, mitä focus:
-variantit tekevät:
focus:outline-none
: Poistaa selaimen oletusarvoisen fokus-ääriviivan. Teemme tämän korvataksemme sen omalla, visuaalisesti miellyttävämmällä tyylillämme.focus:border-sky-500
: Muuttaa reunuksen värin kirkkaan taivaansiniseksi.focus:ring-1 focus:ring-sky-500
: Lisää hienovaraisen ulkoisen hehkun (box-shadow-renkaan) samalla värillä, tehden fokus-tilasta vieläkin näkyvämmän.
active
-variantti: Klikkausten ja napautusten kaappaaminen
active
-variantti otetaan käyttöön, kun käyttäjä aktivoi elementin – esimerkiksi painiketta painettaessa. Se antaa välitöntä palautetta siitä, että klikkaus tai napautus on rekisteröity.
Esimerkki: Painike "painetulla" tehosteella
<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">
Lähetä
</button>
Tässä parannellussa painikkeessa:
active:bg-indigo-700
tekee painikkeesta vielä tummemman, kun sitä painetaan.active:translate-y-0.5
työntää painiketta hieman alas, luoden fyysisen painallusvaikutelman.
Muut interaktiiviset variantit: focus-within
ja focus-visible
focus-within
: Tämä hyödyllinen variantti soveltaa tyylejä *vanhempielementtiin* aina, kun jokin sen *lapsielementeistä* saa fokuksen. Se on täydellinen koko lomakeryhmän muotoiluun, kun käyttäjä on vuorovaikutuksessa sen syötekentän kanssa.
<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-ikoni -->
<svg class="h-6 w-6 text-gray-400">...</svg>
<input type="text" placeholder="Hae..." class="outline-none">
</div>
Nyt, kun käyttäjä fokusoi <input>
-elementtiin, koko vanhempi <div>
saa sinisen reunuksen ja renkaan.
focus-visible
: Selaimilla on erilaisia heuristiikkoja sille, milloin fokus-rengas näytetään. Esimerkiksi ne eivät välttämättä näytä sitä painikkeessa hiiren klikkauksen jälkeen, mutta näyttävät sen näppäimistönavigoinnin jälkeen. focus-visible
-variantin avulla voit hyödyntää tätä älykkäämpää käyttäytymistä. Yleensä on suositeltavaa käyttää focus-visible
-varianttia focus
-variantin sijaan ääriviivojen/renkaiden muotoiluun, jotta voidaan tarjota parempi käyttökokemus sekä hiiri- että näppäimistökäyttäjille.
Tilapohjainen muotoilu: Lomake- ja käyttöliittymäelementtien variantit
Suoran käyttäjävuorovaikutuksen lisäksi elementeillä on usein tiloja, jotka perustuvat niiden attribuutteihin. Tailwind tarjoaa variantteja näiden tilojen deklaratiiviseen muotoiluun.
disabled
-variantti: Käyttökelvottomuudesta viestiminen
Kun painikkeella tai lomakekentällä on disabled
-attribuutti, siihen ei voi vaikuttaa. disabled
-variantin avulla voit muotoilla tämän tilan tehdäkseksi sen visuaalisesti selväksi käyttäjälle.
<button disabled class="bg-slate-300 text-slate-500 font-bold py-2 px-4 rounded cursor-not-allowed
disabled:opacity-50">
Käsitellään...
</button>
Tässä disabled:opacity-50
vähentää painikkeen peittävyyttä, kun disabled
-attribuutti on läsnä, mikä on yleinen tapa ilmaista passiivinen tila. cursor-not-allowed
-apuluokka vahvistaa tätä entisestään.
checked
-variantti: Valintaruuduille ja radiopainikkeille
checked
-variantti on olennainen mukautettujen valintaruutujen ja radiopainikkeiden luomisessa. Se soveltaa tyylejä, kun syötteen checked
-attribuutti on tosi.
Esimerkki: Mukautetusti muotoiltu valintaruutu
<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">Hyväksy käyttöehdot</span>
</label>
Käytämme appearance-none
-luokkaa poistaaksemme selaimen oletusmuotoilun ja sitten käytämme checked:
-varianttia muuttaaksemme taustaväriä, kun ruutu on valittuna. Voisit jopa lisätä valintamerkki-ikonin käyttämällä ::before
- tai ::after
-pseudoelementtejä yhdessä tämän variantin kanssa.
Lomakkeen validointivariantit: required
, optional
, valid
, invalid
Modernit lomakkeet antavat reaaliaikaista validointipalautetta. Tailwindin validointivariantit hyödyntävät selaimen rajoitusten validointi-API:a. Nämä variantit soveltuvat attribuuttien, kuten required
, ja syötteen arvon nykyisen validiteettitilan perusteella (esim. type="email"
).
<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">
Tällä syötekentällä on:
- Vaaleanpunainen reuna ja teksti, jos sisältö ei ole kelvollinen sähköpostiosoite (
invalid:
). - Vihreä reuna, kun kelvollinen sähköpostiosoite on syötetty (
valid:
). - Fokusrengas muuttuu myös vaaleanpunaiseksi, jos kenttä on fokusoitu ollessaan epäkelvossa tilassa (
focus:invalid:
).
Edistynyt interaktiivisuus: group
- ja peer
-variantit
Joskus sinun on muotoiltava elementtiä *toisen* elementin tilan perusteella. Tässä kohtaa voimakkaat group
- ja peer
-konseptit astuvat kuvaan. Ne ratkaisevat kokonaisen luokan käyttöliittymähaasteita, joita oli aiemmin vaikea käsitellä pelkillä apuluokilla.
group
in voima: Lasten muotoilu vanhemman tilan perusteella
group
-variantin avulla voit muotoilla lapsielementtejä vanhempielementin tilan perusteella. Käyttääksesi sitä lisäät group
-luokan vanhempielementtiin, jota haluat seurata. Sitten missä tahansa lapsielementissä voit käyttää variantteja kuten group-hover
, group-focus
jne.
Esimerkki: Kortti, jonka otsikko ja ikoni vaihtavat väriä yhdessä hover-tilassa
<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-ikoni -->
<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">Uusi projekti</h3>
</div>
<p class="text-slate-500 group-hover:text-white text-sm">Luo uusi projekti monista eri malleista.</p>
</a>
Miten se toimii:
- Lisäämme
group
-luokan vanhempana olevaan<a>
-tagiin. - Kun käyttäjä vie hiiren koko linkin päälle, sen taustaväri muuttuu
hover:bg-sky-500
-luokan ansiosta. - Samanaikaisesti
group-hover:stroke-white
-luokka SVG:ssä jagroup-hover:text-white
tekstielementeissä aktivoituvat, muuttaen niiden värit valkoisiksi.
Tämä luo yhtenäisen, kokonaisvaltaisen hover-efektin, joka muuten vaatisi mukautettua CSS:ää tai JavaScriptiä.
Sisarusten muotoilu peer
-variantilla: Mullistava ominaisuus lomakkeille
peer
-variantti on samanlainen kuin group
, mutta se toimii sisaruselementtien muotoiluun. Lisäät peer
-luokan elementtiin, ja sitten voit käyttää variantteja kuten peer-checked
tai peer-invalid
*seuraavissa* sisaruselementeissä muotoillaksesi niitä "vertaisen" tilan perusteella. Tämä on uskomattoman hyödyllistä mukautetuissa lomakeohjaimissa.
Esimerkki: Selite, joka muuttuu, kun siihen liittyvä valintaruutu on valittuna
<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">
Ota ilmoitukset käyttöön
</span>
</label>
Tämä on täydellinen, saavutettava vipukytkin, joka on rakennettu ilman JavaScriptiä!
- Varsinainen valintaruutu
<input>
on visuaalisesti piilotettusr-only
-luokalla (se on silti saavutettavissa ruudunlukijoille) ja merkittypeer
-elementiksi. - Visuaalinen vipukytkin on
<div>
, joka on muotoiltu näyttämään radalta, jossa on kahva (käyttäen::after
-pseudoelementtiä). peer-checked:bg-blue-600
muuttaa radan taustavärin, kun piilotettu valintaruutu on valittuna.peer-checked:after:translate-x-full
liu'uttaa kahvan oikealle, kun valintaruutu on valittuna.peer-checked:text-blue-600
muuttaa sisaruksena olevan<span>
-selitetekstin värin.
Varianttien yhdistäminen hienosäätöä varten
Yksi Tailwindin tehokkaimmista ominaisuuksista on kyky ketjuttaa variantteja yhteen. Tämä mahdollistaa erittäin tarkkojen ehdollisten tyylien luomisen.
Responsiiviset ja tilavariantit: Dynaaminen duo
Voit yhdistää responsiivisia etuliitteitä (kuten md:
, lg:
) tilavariantteihin soveltaaksesi tyylejä vain tietyillä näyttöko'oilla *ja* tietyissä tiloissa. Responsiivinen variantti tulee aina ensin.
Syntaksi: breakpoint:tila:apuluokka
<button class="bg-blue-500 text-white p-2 rounded
hover:bg-blue-600
md:bg-green-500 md:hover:bg-green-600">
Responsiivinen painike
</button>
Tämä painike:
- On sininen pienillä näytöillä, muuttuen tummemman siniseksi hover-tilassa.
- On vihreä keskikokoisilla ja sitä suuremmilla näytöillä (
md:bg-green-500
), muuttuen tummemman vihreäksi hover-tilassa (md:hover:bg-green-600
).
Useiden tilavarianttien pinoaminen
Voit myös pinota useita tilavariantteja soveltaaksesi tyylejä vain, kun kaikki ehdot täyttyvät. Tämä on hyödyllistä vuorovaikutusten hienosäädössä.
Esimerkki: Tumman tilan painike, joka reagoi hover- ja focus-tiloihin eri tavoin
<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">
<!-- Ikoni tähän -->
</button>
Tässä dark:hover:focus:ring-gray-200
soveltaa tiettyä rengasväriä vain, kun tumma tila on aktiivinen, painikkeen päällä on hiiri *ja* se on fokusoitu. Tilavarianttien järjestyksellä ei yleensä ole väliä, koska Tailwind luo oikean CSS-valitsimen yhdistelmälle.
Mukauttaminen ja kertaluonteiset ratkaisut
Vaikka Tailwind tarjoaa kattavan joukon variantteja valmiina, joskus tarvitset enemmän hallintaa.
Mielivaltaisten varianttien käyttö
Kertaluonteisissa tilanteissa, joissa tarvitset CSS-valitsimen, jota ei kata sisäänrakennettu variantti, voit käyttää mielivaltaisia variantteja. Tämä on uskomattoman tehokas keino, jonka avulla voit kirjoittaa mukautettuja valitsimia suoraan class-attribuuttiin, hakasulkeiden sisään.
Esimerkki: Listakohteiden erilainen muotoilu
<ul>
<li class="[&:nth-child(odd)]:bg-gray-100 p-2">Ensimmäinen kohde</li>
<li class="[&:nth-child(odd)]:bg-gray-100 p-2">Toinen kohde</li>
<li class="[&:nth-child(odd)]:bg-gray-100 p-2">Kolmas kohde</li>
</ul>
Luokka [&:nth-child(odd)]:bg-gray-100
luo CSS:n li:nth-child(odd)
-valitsimelle, mikä luo raidallisen listan ilman tarvetta lisätä ylimääräisiä luokkia jokaiseen kohteeseen.
Toinen yleinen käyttötapa on suorien jälkeläisten muotoilu:
<div class="[&_>_p]:mt-4">
<p>Ensimmäinen kappale.</p>
<p>Toinen kappale. Tällä on ylämarginaali.</p>
<div><p>Sisäkkäinen kappale. Tällä EI ole ylämarginaalia.</p></div>
</div>
Luokka [&_>_p]:mt-4
muotoilee vain div-elementin suorat p
-jälkeläiset.
Varianttien konfigurointi `tailwind.config.js`-tiedostossa
Oletusarvoisesti Tailwindin JIT-moottori ottaa kaikki variantit käyttöön kaikille ydinliitännäisille. Kuitenkin, jos sinun on otettava variantit käyttöön kolmannen osapuolen liitännäisille tai haluat rekisteröidä mukautetun variantin, sinun on käytettävä `tailwind.config.js`-tiedostoasi.
// tailwind.config.js
module.exports = {
// ...
plugins: [
function({ addVariant }) {
addVariant('child', '& > *');
addVariant('child-hover', '& > *:hover');
}
],
}
Tämä mukautettu liitännäinen lisää uudet child
- ja child-hover
-variantit, joita voit sitten käyttää kuten child:text-red-500
muotoillaksesi kaikki elementin suorat jälkeläiset.
Yhteenveto: Tilapohjaisen käyttöliittymän voima
Tailwind CSS -variantit ovat enemmän kuin vain mukavuus; ne ovat perustavanlaatuinen osa utility-first-filosofiaa. Sallimalla sinun kuvailla elementin ulkonäköä kaikissa sen mahdollisissa tiloissa suoraan HTML:ssä, variantit auttavat sinua rakentamaan monimutkaisia, vakaita ja erittäin ylläpidettäviä käyttöliittymiä.
Yksinkertaisista hover
-efekteistä monimutkaisiin peer-checked
-variantilla rakennettuihin lomakeohjaimiin ja responsiivisiin, monen tilan yhdistelmiin, sinulla on nyt kattava työkalupakki suunnitelmiesi elävöittämiseen. Ne kannustavat komponenttipohjaiseen ajattelutapaan, jossa kaikki logiikka – rakenne, tyyli ja tila – on kapseloitu yhteen paikkaan.
Olemme käsitelleet perusasiat ja tutkineet edistyneitä tekniikoita, mutta matka ei pääty tähän. Paras tapa hallita variantteja on käyttää niitä. Kokeile niiden yhdistämistä, tutustu täydelliseen listaan virallisessa Tailwind CSS -dokumentaatiossa ja haasta itsesi rakentamaan interaktiivisia komponentteja turvautumatta mukautettuun CSS:ään tai JavaScriptiin. Hyväksymällä tilapohjaisen muotoilun voiman pystyt rakentamaan nopeampia, johdonmukaisempia ja miellyttävämpiä käyttökokemuksia maailmanlaajuiselle yleisölle.