Semua ArtikelCSS Modern
8 Februari 2025·9 menit baca

Tailwind CSS Mastery: Teknik Beyond the Basics

Banyak developer hanya menggunakan 20% kemampuan Tailwind. Artikel ini membahas fitur-fitur tersembunyi dan pola arsitektur yang akan membuat kode CSS kamu jauh lebih efisien dan maintainable.

1. Arbitrary Values & Properties

Tailwind mendukung nilai arbitrary menggunakan notasi kurung kotak. Ini sangat berguna saat kamu butuh nilai yang tidak ada di design system standar Tailwind.

html·Arbitrary Values
<!-- Ukuran spesifik yang tidak ada di config default -->
<div class="w-[327px] h-[52px]"></div>

<!-- Warna hex atau rgb langsung -->
<div class="bg-[#1a2b3c] text-[rgb(255,100,50)]"></div>

<!-- CSS custom properties -->
<div class="bg-[var(--brand-color)]"></div>

<!-- CSS arbitrary property -->
<div class="[writing-mode:vertical-lr]">
  Teks Vertikal
</div>

2. Variant Management dengan cva

Library class-variance-authority (cva) adalah solusi terbaik untuk mengelola class kondisional di Tailwind. Sangat cocok untuk membangun design system yang scalable.

tsx·Button dengan cva
import { cva, type VariantProps } from "class-variance-authority";
import { clsx } from "clsx";

const buttonVariants = cva(
  "inline-flex items-center justify-center rounded-lg font-medium transition-all",
  {
    variants: {
      variant: {
        primary:   "bg-sky-500 text-white hover:bg-sky-600",
        secondary: "bg-zinc-100 text-zinc-900 hover:bg-zinc-200",
        ghost:     "text-zinc-600 hover:bg-zinc-100",
        danger:    "bg-red-500 text-white hover:bg-red-600",
      },
      size: {
        sm: "h-8 px-3 text-sm",
        md: "h-10 px-4 text-sm",
        lg: "h-12 px-6 text-base",
      },
    },
    defaultVariants: { variant: "primary", size: "md" },
  }
);

3. Jangan Buat Class Dinamis!

⚠️ Tailwind scanner hanya mendeteksi string yang lengkap. Jika kamu menulis bg-${color}-500, kelas tersebut tidak akan di-include dalam build production.
tsx·Cara yang Benar
// ❌ TIDAK bekerja di production
const color = "red";
<div className={`bg-${color}-500`}></div>

// ✅ Gunakan object mapping
const colorMap = {
  red:   "bg-red-500",
  blue:  "bg-blue-500",
  green: "bg-green-500",
};
<div className={colorMap[color]}></div>