Legge til egendefinerte varianter via en plugin
Opprett egendefinerte tilstandsvarianter med addVariant for å målrette velgere som .is-active eller data-attributter, og bruk dem som klasseprefikser i markup.
Legge til egendefinerte varianter via en plugin er en gratis leksjon i Tailwind CSS Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Tailwind CSS Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Tailwind CSS Academy inneholder totalt 4 leksjoner.
Hva er Tailwind-varianter?
Tailwind-varianter er prefiksene som hover:, focus:, dark: og sm:, som bruker en utility-klasse betinget. Hver variant pakker den genererte CSS-en inn i en selektor eller mediespørring. Plugin-hjelpefunksjonen addVariant lar Dem registrere egne variantprefikser, slik at De kan skrive for eksempel aria-selected:bg-blue-100, data-active:opacity-100 eller is-loading:cursor-wait i HTML-en.
Hjelpefunksjonen addVariant
addVariant tar to argumenter: variantnavnet (prefikset før kolon) og en malstreng for selektoren. Selektoren bruker & som plassholder for den genererte klasseselektoren. Når en bruker skriver hocus:bg-gray-100, erstatter Tailwind & med den genererte klasseselektoren for bg-gray-100 og pakker den inn i selektormønsteret Deres.
const plugin = require('tailwindcss/plugin');
plugin(function({ addVariant }) {
// 'hocus' = hover OR focus (useful for touch/keyboard parity)
addVariant('hocus', ['&:hover', '&:focus']);
// Usage in markup:
// <button class='hocus:bg-blue-100 hocus:text-blue-700'>
// This button highlights on both hover and focus
// </button>
})Varianter for dataattributter
En av de mest praktiske bruksområdene for egendefinerte varianter er målretting av dataattributter. Mange UI-rammeverk (som Alpine.js, Headless UI og Stimulus) kommuniserer tilstand gjennom data-*-attributter. Med egendefinerte varianter kan De bruke Tailwind-klasser basert på disse attributtene, slik at all styling blir værende i HTML-ens klasseliste i stedet for at CSS blandes med attributtselektorer i et stilark.
plugin(function({ addVariant }) {
// Target elements with data-active='true'
addVariant('data-active', '&[data-active='true']');
// Target elements with data-state='open'
addVariant('open', '&[data-state='open']');
// Target disabled attribute (not just :disabled pseudo-class)
addVariant('ui-disabled', '&[aria-disabled='true']');
})
// Usage:
// <div data-state='open' class='open:bg-blue-50 open:border-blue-200'>
// <button aria-disabled='true' class='ui-disabled:opacity-50 ui-disabled:cursor-not-allowed'>Varianter for tilstand i overordnede elementer
Tailwind har innebygde mønstre for group og peer, men noen ganger trenger De å målrette elementer basert på en overordnet med en bestemt klasse eller et bestemt attributt. Med egendefinerte varianter som bruker :where() eller direkte syntaks for overordnede elementer kan De uttrykke disse relasjonene. Selektoren i addVariant kan referere til overordnede elementer ved å bruke mønstre som .parent-class &.
plugin(function({ addVariant }) {
// Apply when an ancestor has .is-dragging class
addVariant('dragging', '.is-dragging &');
// Apply when the form has [data-submitting] attribute
addVariant('submitting', '[data-submitting] &');
// Apply when the theme container is in .dark mode
addVariant('dark-mode', '.dark &');
})
// Usage:
// <form data-submitting>
// <input class='submitting:opacity-50 submitting:cursor-wait' />
// <button class='submitting:bg-gray-400 submitting:pointer-events-none'>
// Submit
// </button>
// </form>Varianter for nth-child og nth-of-type
CSS-pseudoselektorene :nth-child() og :nth-of-type() gjør det mulig å style basert på plasseringen i en liste. Tailwind inkluderer variantene odd: og even:, men ikke alle uttrykk for :nth-child. Legg til egendefinerte varianter for mønstre De bruker ofte, som first-three: for de tre første listeelementene eller last-two: for de to siste.
plugin(function({ addVariant }) {
// First 3 items
addVariant('first-3', '&:nth-child(-n+3)');
// Every 3rd item
addVariant('third', '&:nth-child(3n)');
// Only child
addVariant('only', '&:only-child');
// Not the first child
addVariant('not-first', '&:not(:first-child)');
// Not the last child
addVariant('not-last', '&:not(:last-child)');
})
// Usage:
// <ul>
// <li class='first-3:font-bold not-last:border-b'>Item 1</li>
// <li class='first-3:font-bold not-last:border-b'>Item 2</li>
// <li class='first-3:font-bold not-last:border-b'>Item 3</li>
// </ul>Kombinasjonsvarianter
Det andre argumentet til addVariant kan være en array med selektorer. Når det oppgis en array, blir hver selektor en separat regel, slik at enhver selektor i arrayen utløser varianten. Dette er nyttig for kombinasjonsvarianter som skal gjelde på tvers av flere relaterte selektorer – for eksempel styling av et element når det enten er valgt eller utvidet.
plugin(function({ addVariant }) {
// 'selected' applies on aria-selected OR aria-current
addVariant('selected', [
'&[aria-selected='true']',
'&[aria-current='true']',
'&[aria-current='page']'
]);
// 'expanded' applies on open disclosure or expanded accordion
addVariant('expanded', [
'&[aria-expanded='true']',
'&[data-state='open']'
]);
})
// Usage:
// <a class='selected:bg-blue-50 selected:text-blue-700 expanded:rotate-180'>Varianter for pseudoelementer
De kan legge til varianter som målretter pseudoelementer som ::before, ::after, ::placeholder og ::selection. Selektormalen bruker &:: for pseudoelementer. Kombinert med Tailwinds utilities for innhold muliggjør pseudoelementvarianter dekorative elementer som kun bruker CSS, uten ekstra HTML-markering.
plugin(function({ addVariant }) {
// ::after pseudo-element variant
addVariant('after', '&::after');
// ::before pseudo-element variant
addVariant('before', '&::before');
// ::selection (text selection styling)
addVariant('selection', '&::selection');
})
// Usage (combine with content utility for decorative elements):
// <div class="
// relative
// after:content-[''] after:absolute after:inset-0
// after:bg-gradient-to-t after:from-black/50 after:to-transparent
// after:rounded-xl after:pointer-events-none
// ">Varianter for mediespørringer
Egendefinerte varianter kan også pakke utilities inn i mediespørringer utover Tailwinds standard-bruddpunkter. Bruk dette for funksjoner som prefers-reduced-motion, prefers-contrast eller egendefinerte DPI-spørringer. Send mediespørringen som en streng i det andre argumentet til addVariant, med syntaksen @media.
plugin(function({ addVariant }) {
// Prefers reduced motion variant
addVariant('motion-reduce', '@media (prefers-reduced-motion: reduce)');
// High contrast mode
addVariant('contrast-high', '@media (prefers-contrast: high)');
// Print media
addVariant('print', '@media print');
// Pointer: coarse (touch devices)
addVariant('touch', '@media (pointer: coarse)');
})
// Usage:
// <div class='motion-reduce:transition-none motion-reduce:animate-none'>
// <button class='touch:py-4 touch:text-lg'>Larger on touch</button>ARIA-attributtvarianter for tilgjengelighet
ARIA-attributter er den viktigste måten hjelpeteknologier kommuniserer tilstand på. Ved å bygge egendefinerte varianter for vanlige ARIA-tilstander kan De skrive tilgjengelighetsstyrt styling direkte i HTML. Tailwind v3.2+ la til noen innebygde ARIA-varianter (aria-checked:, aria-selected:), men De kan utvide dette med alle ARIA-attributter som UI-komponentene Deres bruker.
plugin(function({ addVariant }) {
// Custom ARIA variants for component states
addVariant('aria-expanded-true', '&[aria-expanded='true']');
addVariant('aria-pressed', '&[aria-pressed='true']');
addVariant('aria-busy', '&[aria-busy='true']');
addVariant('aria-invalid', '&[aria-invalid='true']');
addVariant('aria-required', '&[aria-required='true']');
})
// Usage:
// <button aria-pressed='true'
// class='aria-pressed:bg-blue-600 aria-pressed:text-white
// aria-busy:opacity-60 aria-busy:cursor-wait'>
// Toggle
// </button>Kombinere addVariant med addUtilities
De mest kraftige pluginene kombinerer addVariant og addUtilities (eller addComponents) i én plugin. En plugin kan for eksempel definere en selected:-variant OG et sett med .menu-item-komponentklasser som fungerer sammen. Når relaterte utilities og varianter pakkes i én plugin, forblir funksjonen helhetlig og enkel å aktivere eller deaktivere som en enhet.
// A complete 'list-nav' plugin
plugin(function({ addVariant, addComponents }) {
// Variant: item is the currently active page
addVariant('nav-active', '&[data-nav-active='true']');
// Component: base nav item style
addComponents({
'.nav-item': {
display: 'flex',
alignItems: 'center',
gap: '0.5rem',
padding: '0.5rem 0.75rem',
borderRadius: '0.5rem',
fontSize: '0.875rem',
fontWeight: '500',
color: '#4b5563',
cursor: 'pointer',
transition: 'background-color 150ms, color 150ms',
'&:hover': { backgroundColor: '#f3f4f6' }
}
});
})
// Usage:
// <a class='nav-item nav-active:bg-blue-50 nav-active:text-blue-700'>Teste egendefinerte varianter
Kontroller at egendefinerte varianter fungerer, ved å skrive HTML som bruker dem, kjøre Tailwind CLI og inspisere den genererte CSS-en. Den genererte selektoren bør samsvare med malen i addVariant. Test også at varianten kombineres riktig med responsive prefikser – md:data-active:bg-blue-100 – og med andre tilstandsvarianter som hover:data-active:bg-blue-200. Enkelte kombinasjoner av varianter kan produsere uventede selektorer; testing bekrefter at den genererte CSS-en er slik De forventer.
<!-- test.html -->
<div data-active='true'
class='data-active:bg-blue-50 data-active:border-blue-200
hover:data-active:bg-blue-100
md:data-active:bg-blue-200'>
Content
</div>
<button aria-pressed='true'
class='aria-pressed:bg-blue-600 aria-pressed:text-white'>
Toggle
</button>
<!-- Expected generated CSS: -->
/* .data-active\:bg-blue-50[data-active='true'] { background-color: #eff6ff } */
/* @media (min-width: 768px) { .md\:data-active\:bg-blue-200[data-active='true'] { ... } } */Kort kontroll
Test forståelsen Deres av konseptene i Tailwind CSS Mastery fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen lærte De: addVariant oppretter egendefinerte klasseprefikser som pakker utilities inn i selektormønstre eller mediespørringer, varianter for dataattributter lar Dem style basert på tilstand i rammeverket uten å skrive CSS, og varianter kan kombineres ved hjelp av arrayer for å dekke flere selektorer. Neste steg er å lære hvordan De pakker og publiserer Tailwind-plugins for gjenbruk på tvers av prosjekter.
Lær deg HTML med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Legge til egendefinerte varianter via en plugin» gratis?
Ja – hele teksten i «Legge til egendefinerte varianter via en plugin» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Tailwind CSS Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Tailwind CSS Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Legge til egendefinerte varianter via en plugin»?
Opprett egendefinerte tilstandsvarianter med addVariant for å målrette velgere som .is-active eller data-attributter, og bruk dem som klasseprefikser i markup. Du øver på Tailwind CSS Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Tailwind CSS Academy?
Ingen tidligere erfaring er nødvendig. Tailwind CSS Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Legge til egendefinerte varianter via en plugin»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Tailwind CSS Academy-leksjonen?
Ja. Alle Tailwind CSS Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Tailwinds plugin-API
- Legge til egendefinerte verktøyklasser via en plugin
- Legge til egendefinerte varianter via en plugin
- Publisere og gjenbruke plugins