Tailwind CSS Academy · Pelajaran

Fungsi @apply dan Kapan Menggunakannya

Pahami cara @apply menyisipkan kelas utilitas ke dalam aturan CSS dan kenali situasi yang tepat untuk mengekstrak sebuah kelas.

Pelajaran 1 dari 413 langkah

Fungsi @apply dan Kapan Menggunakannya adalah pelajaran Tailwind CSS Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Masalah yang Diatasi @apply

Pendekatan Tailwind yang mengutamakan utilitas menempatkan semua gaya langsung pada elemen HTML. Untuk halaman sederhana, hal ini tidak masalah. Namun, ketika kombinasi 15 class utilitas yang sama muncul pada 50 elemen tombol, memperbarui satu detail desain mengharuskan Anda mengubah 50 tempat. Direktif @apply mengatasi masalah ini dengan memungkinkan Anda mengekstrak kombinasi utilitas yang sering diulang ke dalam satu class CSS khusus — tanpa meninggalkan sistem utilitas Tailwind.

Cara Kerja @apply

@apply adalah direktif PostCSS yang diproses Tailwind selama kompilasi. Saat Tailwind menemukan @apply bg-blue-600 text-white font-semibold di dalam aturan CSS, Tailwind menyisipkan deklarasi CSS yang akan dihasilkan oleh utilitas tersebut. Aturan CSS yang dihasilkan berisi nilai properti sebenarnya, bukan nama class Tailwind. Hasil akhir yang dikirim ke peramban tidak lagi mengenal Tailwind atau @apply.

/* Your CSS with @apply */
@layer components {
  .btn {
    @apply px-4 py-2 rounded-lg font-semibold text-sm;
  }
  .btn-primary {
    @apply btn bg-blue-600 text-white hover:bg-blue-700;
  }
}

/* Compiled output (what the browser sees) */
.btn {
  padding: 0.5rem 1rem;
  border-radius: 0.5rem;
  font-weight: 600;
  font-size: 0.875rem;
}
.btn-primary {
  /* btn styles + primary colors */
}

Menulis @apply dalam File CSS

Gunakan @apply di dalam file CSS yang diproses oleh Tailwind. Selalu bungkus class komponen yang diekstrak dalam blok @layer components agar Tailwind menyisipkannya pada posisi yang benar dalam lembar gaya yang dihasilkan — setelah gaya dasar, tetapi sebelum class utilitas. Dengan demikian, class utilitas yang diterapkan langsung dalam HTML tetap dapat menimpa gaya class komponen Anda.

/* styles/components.css or in your main CSS file */
@layer components {
  .btn {
    @apply inline-flex items-center justify-center
           px-4 py-2 rounded-lg text-sm font-semibold
           transition-colors duration-150
           focus:outline-none focus:ring-2 focus:ring-offset-2;
  }

  .btn-primary {
    @apply btn bg-blue-600 text-white
           hover:bg-blue-700
           focus:ring-blue-500;
  }

  .btn-secondary {
    @apply btn bg-gray-200 text-gray-800
           hover:bg-gray-300
           focus:ring-gray-500;
  }
}

Kapan Menggunakan @apply

Situasi yang tepat untuk @apply bersifat terbatas dan spesifik. Gunakan saat: kombinasi utilitas yang sama muncul persis di 5 tempat atau lebih; komponen ditampilkan dalam konteks ketika Anda tidak dapat mengendalikan HTML (seperti konten yang dirender dari markdown atau komponen pihak ketiga); atau ketika keterbatasan kerangka kerja membuat logika kondisional berbasis class tidak praktis. Jika Anda dapat menggunakan komponen JSX, komponen Vue, atau bagian HTML, pilihan-pilihan tersebut hampir selalu lebih baik.

Kasus Penggunaan @apply yang Umum

Kasus penggunaan praktis @apply mencakup: gaya dasar tombol yang digunakan bersama oleh banyak tombol, gaya reset input formulir yang diterapkan secara seragam, gaya tipografi untuk konten blog yang dirender dari markdown, serta class utilitas yang disisipkan dalam HTML komponen pihak ketiga yang tidak dapat Anda ubah. Dalam semua kasus ini, intinya adalah Anda tidak dapat menempatkan class utilitas langsung pada elemen HTML yang membutuhkannya.

@layer components {
  /* Used in markdown-rendered content where you can't add classes to elements */
  .content h1 { @apply text-3xl font-bold mb-4 text-gray-900; }
  .content h2 { @apply text-2xl font-semibold mb-3 text-gray-800; }
  .content p  { @apply text-gray-600 leading-relaxed mb-4; }
  .content a  { @apply text-blue-600 underline hover:text-blue-800; }
  .content ul { @apply list-disc list-inside mb-4 space-y-1; }

  /* Shared input base */
  .form-field {
    @apply w-full rounded-lg border border-gray-300 px-4 py-2
           focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm;
  }
}

Direktif @layer

Tailwind memiliki tiga lapisan: base, components, dan utilities. Gunakan @layer base untuk reset elemen dan bawaan global. Gunakan @layer components untuk class komponen yang diekstrak dan dibuat dengan @apply. Gunakan @layer utilities untuk class utilitas khusus dengan satu tujuan. Urutan lapisan memastikan class utilitas selalu menimpa class komponen, yang menimpa gaya dasar — sehingga hierarki kekhususan yang diharapkan tetap terjaga.

@layer base {
  /* Global resets and element defaults */
  body { @apply font-sans text-gray-900 antialiased; }
  a { @apply text-blue-600 hover:underline; }
}

@layer components {
  /* Extracted multi-utility patterns */
  .card { @apply bg-white rounded-xl shadow p-6; }
}

@layer utilities {
  /* Custom single-purpose utilities */
  .text-balance { text-wrap: balance; }
}

Menerapkan Pengubah dengan @apply

Anda dapat menggunakan pengubah status dan responsif di dalam @apply, sama seperti dalam HTML. Tulis hover:bg-blue-700, focus:ring-2, atau md:flex langsung dalam pernyataan @apply, lalu Tailwind membuat CSS berbasis pemilih yang benar. Inilah salah satu alasan @apply lebih kuat daripada menulis CSS secara manual — Anda mendapatkan seluruh sistem varian tanpa usaha tambahan.

@layer components {
  .badge {
    @apply
      inline-flex items-center px-2.5 py-0.5 rounded-full
      text-xs font-medium
      bg-gray-100 text-gray-700
      /* Hover state */
      hover:bg-gray-200
      /* Dark mode */
      dark:bg-gray-700 dark:text-gray-300
      dark:hover:bg-gray-600
      /* Transition */
      transition-colors duration-150;
  }
}

Merangkai Class @apply

Anda dapat merujuk class komponen lain yang dibuat dengan @apply di dalam @apply lainnya. Misalnya, tentukan class dasar .btn, lalu rujuk class tersebut dalam .btn-primary untuk mewarisi semua gaya dasar tombol. Ini membuat rangkaian pewarisan sederhana. Berhati-hatilah terhadap penumpukan yang terlalu dalam — hal itu menciptakan dependensi implisit yang sulit dilacak saat melakukan debug.

@layer components {
  /* Base class */
  .btn {
    @apply inline-flex items-center px-4 py-2 rounded-lg
           text-sm font-medium transition-colors duration-150
           focus:outline-none focus:ring-2 focus:ring-offset-2;
  }

  /* Variants inherit from .btn */
  .btn-primary   { @apply btn bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500; }
  .btn-danger    { @apply btn bg-red-600 text-white hover:bg-red-700 focus:ring-red-500; }
  .btn-ghost     { @apply btn text-gray-700 hover:bg-gray-100 focus:ring-gray-400; }
}

@apply dalam Gaya SFC

Dalam Vue Single File Components (SFC) dan beberapa pengaturan React dengan CSS Modules, Anda dapat menggunakan @apply di dalam blok <style> komponen. Dengan demikian, gaya komponen tetap berada bersama templatnya sekaligus tetap menggunakan utilitas Tailwind sebagai blok pembangun. Konfigurasikan bundler Anda untuk memproses blok gaya tersebut melalui PostCSS dengan plugin Tailwind agar @apply dapat digunakan.

<!-- Vue SFC with @apply in <style> -->
<template>
  <button class="btn">Click Me</button>
</template>

<style scoped>
  .btn {
    @apply bg-blue-600 text-white px-4 py-2 rounded-lg
           font-medium hover:bg-blue-700
           transition-colors duration-150;
  }
</style>

Pertanyaan yang Tepat: Apakah @apply Diperlukan?

Sebelum menggunakan @apply, selalu tanyakan: bisakah saya mengekstraknya menjadi komponen? Dalam React, ini berarti membuat komponen Button yang menerima prop variant. Dalam HTML, ini berarti menggunakan bagian atau penyertaan templat. Mengekstrak komponen biasanya lebih baik daripada @apply karena pendekatan ini eksplisit, mudah dicari, dan berfungsi dengan semua kerangka kerja. Gunakan @apply hanya ketika ekstraksi komponen tidak mungkin atau tidak praktis.

/* Instead of @apply in a CSS file... */
.btn-primary { @apply bg-blue-600 text-white px-4 py-2 rounded-lg; }

/* Prefer a JSX component */
function Button({ children, variant = 'primary' }) {
  const styles = {
    primary: 'bg-blue-600 text-white hover:bg-blue-700',
    secondary: 'bg-gray-200 text-gray-800 hover:bg-gray-300',
  };
  return (
    <button className={'px-4 py-2 rounded-lg font-medium ' + styles[variant]}>
      {children}
    </button>
  );
}

Memverifikasi Hasil @apply

Setelah menulis aturan @apply, verifikasi bahwa aturan tersebut dikompilasi dengan benar dengan membangun CSS Anda dan memeriksa hasilnya. Cari nama class yang Anda buat dalam file CSS hasil kompilasi. Anda seharusnya melihat deklarasi CSS lengkap yang disisipkan — bukan sintaks @apply, karena sintaks tersebut dihapus selama kompilasi. Jika class tidak ada atau menampilkan properti yang tidak diharapkan, periksa penempatan @layer dan pastikan semua utilitas yang dirujuk merupakan class Tailwind yang valid.

# Build and search for your custom class
npx tailwindcss -i ./src/input.css -o ./dist/output.css
grep '.btn-primary' ./dist/output.css

# Or watch mode for real-time feedback
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch

Pemeriksaan Cepat

Uji pemahaman Anda tentang direktif @apply dalam Tailwind CSS.

Rangkuman Pelajaran

Dalam pelajaran ini, Anda telah mempelajari: @apply menyisipkan CSS class utilitas ke dalam nama class khusus dan ideal untuk konten yang tidak dapat Anda tambahkan class secara langsung, selalu tempatkan class berbasis @apply di dalam @layer components untuk mempertahankan kekhususan yang tepat, dan ekstraksi komponen (JSX, Vue SFC, bagian HTML) biasanya lebih disarankan daripada @apply jika memungkinkan. Selanjutnya, kita akan membuat class komponen yang dapat digunakan kembali dengan @apply.

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 “Fungsi @apply dan Kapan Menggunakannya” gratis?

Ya — teks lengkap “Fungsi @apply dan Kapan Menggunakannya” 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 “Fungsi @apply dan Kapan Menggunakannya”?

Pahami cara @apply menyisipkan kelas utilitas ke dalam aturan CSS dan kenali situasi yang tepat untuk mengekstrak sebuah kelas. 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 1 dari 4.

Berapa lama pelajaran “Fungsi @apply dan Kapan Menggunakannya” 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. Fungsi @apply dan Kapan Menggunakannya
  2. Membuat Kelas Komponen yang Dapat Digunakan Ulang
  3. Mengatur CSS Khusus dengan Layer
  4. Kekeliruan dan Alternatif @apply
← Kembali ke Tailwind CSS Academy