Fungsi @apply dan Kapan Menggunakannya
Pahami cara @apply menyisipkan kelas utilitas ke dalam aturan CSS dan kenali situasi yang tepat untuk mengekstrak sebuah kelas.
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 --watchPemeriksaan 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.
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
- Fungsi @apply dan Kapan Menggunakannya
- Membuat Kelas Komponen yang Dapat Digunakan Ulang
- Mengatur CSS Khusus dengan Layer
- Kekeliruan dan Alternatif @apply