Tailwind CSS Academy · Pelajaran

Menambahkan Varian Kustom melalui Plugin

Buat varian status kustom dengan addVariant untuk menargetkan pemilih seperti .is-active atau atribut data, lalu gunakan varian tersebut sebagai awalan kelas dalam markup.

Pelajaran 3 dari 413 langkah

Menambahkan Varian Kustom melalui Plugin adalah pelajaran Tailwind CSS Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Tailwind CSS Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Tailwind CSS Academy mencakup 4 pelajaran total.

Apa Itu Varian Tailwind?

variants Tailwind adalah awalan seperti hover:, focus:, dark:, dan sm: yang menerapkan class utilitas secara bersyarat. Setiap varian membungkus CSS yang dihasilkan dalam pemilih atau kueri media. Pembantu plugin addVariant memungkinkan Anda mendaftarkan awalan varian sendiri, sehingga Anda dapat menulis hal-hal seperti aria-selected:bg-blue-100, data-active:opacity-100, atau is-loading:cursor-wait di HTML.

Pembantu addVariant

addVariant menerima dua argumen: nama varian (awalan sebelum titik dua) dan string templat pemilih. Pemilih menggunakan & sebagai penanda untuk pemilih class yang dihasilkan. Ketika pengguna menulis hocus:bg-gray-100, Tailwind mengganti & dengan pemilih class yang dihasilkan untuk bg-gray-100, lalu membungkusnya dalam pola pemilih Anda.

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>
})

Varian Atribut Data

Salah satu penggunaan varian khusus yang paling praktis adalah menargetkan atribut data. Banyak kerangka kerja UI (seperti Alpine.js, Headless UI, dan Stimulus) mengomunikasikan status melalui atribut data-*. Varian khusus memungkinkan Anda menerapkan class Tailwind berdasarkan atribut tersebut, sehingga semua gaya tetap berada di dalam daftar class HTML dan tidak tercampur dengan pemilih atribut CSS di lembar gaya.

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'>

Varian Status Induk

Tailwind memiliki pola bawaan group dan peer, tetapi terkadang Anda perlu menargetkan elemen berdasarkan induk dengan class atau atribut tertentu. Varian khusus yang menggunakan sintaks :where() atau sintaks leluhur langsung memungkinkan Anda menyatakan hubungan ini. Pemilih addVariant dapat merujuk elemen induk dengan menggunakan pola .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>

Varian nth-Child dan nth-of-Type

Pemilih semu CSS :nth-child() dan :nth-of-type() memungkinkan penataan berdasarkan posisi dalam daftar. Tailwind menyertakan varian odd: dan even:, tetapi tidak semua ekspresi :nth-child. Tambahkan varian khusus untuk pola yang sering Anda gunakan, seperti first-three: untuk tiga item daftar pertama atau last-two: untuk dua item terakhir.

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>

Varian Kombinasi

Argumen kedua addVariant menerima array pemilih. Jika array diberikan, setiap pemilih menjadi aturan terpisah, sehingga pemilih mana pun dalam array dapat memicu varian tersebut. Ini berguna untuk varian kombinasi yang harus diterapkan pada beberapa pemilih terkait—misalnya saat menata elemen yang sedang dipilih atau diperluas.

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'>

Varian Pseudo-Elemen

Anda dapat menambahkan varian yang menargetkan pseudo-elemen seperti ::before, ::after, ::placeholder, dan ::selection. Templat pemilih menggunakan &:: untuk pseudo-elemen. Jika dipadukan dengan utilitas konten Tailwind, varian pseudo-elemen memungkinkan elemen dekoratif yang hanya menggunakan CSS tanpa markup HTML tambahan.

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
// ">

Varian Kueri Media

Varian khusus juga dapat membungkus utilitas dalam kueri media di luar titik henti bawaan Tailwind. Gunakan ini untuk fitur seperti prefers-reduced-motion, prefers-contrast, atau kueri DPI khusus. Teruskan string kueri media sebagai argumen kedua ke addVariant dengan sintaks @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>

Varian Atribut ARIA untuk Aksesibilitas

Atribut ARIA adalah cara utama teknologi bantu mengomunikasikan status. Membuat varian khusus untuk status ARIA yang umum memungkinkan Anda menulis gaya yang didorong oleh aksesibilitas langsung di HTML. Tailwind v3.2+ menambahkan beberapa varian ARIA bawaan (aria-checked:, aria-selected:), tetapi Anda dapat memperluasnya dengan atribut ARIA apa pun yang digunakan komponen UI Anda.

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>

Menggabungkan addVariant dengan addUtilities

plugin yang paling kuat menggabungkan addVariant dan addUtilities (atau addComponents) dalam satu plugin. Misalnya, sebuah plugin dapat mendefinisikan varian selected: DAN sekumpulan class komponen .menu-item yang bekerja bersama. Mengemas utilitas dan varian terkait dalam satu plugin menjaga fitur tetap padu serta mudah diaktifkan atau dinonaktifkan sebagai satu kesatuan.

// 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'>

Menguji Varian Khusus

Pastikan varian khusus berfungsi dengan menulis HTML yang menggunakannya, menjalankan Tailwind CLI, lalu memeriksa CSS keluaran. Pemilih yang dihasilkan harus sesuai dengan templat addVariant Anda. Uji juga apakah varian tersebut dapat dikomposisikan dengan benar bersama awalan responsif—md:data-active:bg-blue-100—dan varian status lain seperti hover:data-active:bg-blue-200. Beberapa kombinasi varian dapat menghasilkan pemilih yang tidak terduga; pengujian memastikan CSS yang dihasilkan sesuai dengan harapan Anda.

<!-- 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'] { ... } } */

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Tailwind CSS Mastery dari pelajaran ini.

Ringkasan Pelajaran

Dalam pelajaran ini Anda telah mempelajari: addVariant membuat awalan class khusus yang membungkus utilitas dalam pola pemilih atau kueri media, data attribute variants memungkinkan Anda menata gaya berdasarkan status kerangka kerja tanpa menulis CSS, dan varian dapat digabungkan dengan array untuk mencakup banyak pemilih. Selanjutnya, kita akan mempelajari cara mengemas dan menerbitkan plugin Tailwind agar dapat digunakan kembali di berbagai proyek.

Gratis untuk memulai

Belajar HTML dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menambahkan Varian Kustom melalui Plugin” gratis?

Ya — teks lengkap “Menambahkan Varian Kustom melalui Plugin” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Tailwind CSS Academy, upgrade ke CoddyKit PRO. Kursus Tailwind CSS Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menambahkan Varian Kustom melalui Plugin”?

Buat varian status kustom dengan addVariant untuk menargetkan pemilih seperti .is-active atau atribut data, lalu gunakan varian tersebut sebagai awalan kelas dalam markup. Kamu berlatih Tailwind CSS Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Tailwind CSS Academy?

Tidak diperlukan pengalaman sebelumnya. Tailwind CSS Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Menambahkan Varian Kustom melalui Plugin” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Tailwind CSS Academy ini?

Ya. Setiap pelajaran Tailwind CSS Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. API Plugin Tailwind
  2. Menambahkan Utilitas Kustom melalui Plugin
  3. Menambahkan Varian Kustom melalui Plugin
  4. Mempublikasikan dan Menggunakan Ulang Plugin
← Kembali ke Tailwind CSS Academy