Variabel CSS (Custom Properties) & calc()
Menyimpan nilai yang dipakai berulang (warna, jarak) dalam variabel, memakainya dengan var(), serta menghitung ukuran dengan calc(), min(), max(), dan clamp().
Masalah nilai berulang
Bayangkan warna utama website kamu #3c5a44 dipakai di 40 tempat. Lalu klien ingin menggantinya. Kamu harus mengubah 40 baris, dan satu yang terlewat membuat tampilan tidak konsisten. Variabel CSS menyelesaikannya: tulis sekali, pakai di mana saja.
Membuat dan memakai variabel
:root {
--warna-utama: #3c5a44;
--warna-aksen: #cf9d3d;
--jarak: 16px;
--radius: 12px;
}
.tombol {
background: var(--warna-utama);
padding: var(--jarak);
border-radius: var(--radius);
}
- Nama variabel diawali dua tanda hubung
--. - Dipakai dengan fungsi
var(--nama). :rootadalah elemen paling atas (html), sehingga variabel di sana berlaku di seluruh halaman.- Variabel bersifat case-sensitive:
--Warnaberbeda dari--warna.
Nilai cadangan (fallback)
color: var(--warna-teks, #333); /* kalau --warna-teks tidak ada, pakai #333 */
Variabel bisa ditimpa di lingkup tertentu
Variabel mengikuti aturan pewarisan. Kamu bisa mengubah nilainya di bagian tertentu sehingga semua anak ikut berubah:
.tema-gelap {
--latar: #1b1f1a;
--teks: #f6f2e9;
}
.kartu {
background: var(--latar);
color: var(--teks);
}
Inilah dasar membuat mode gelap/terang: cukup mengganti nilai variabel, bukan menulis ulang semua aturan.
calc(): hitung di CSS
calc() mengizinkan operasi + - * / dengan satuan berbeda. Tanda + dan - wajib dikelilingi spasi.
.konten { width: calc(100% - 40px); }
.judul { font-size: calc(1rem + 1vw); }
.item { margin: calc(var(--jarak) * 2); }
min(), max(), clamp()
| Fungsi | Artinya | Contoh |
|---|---|---|
min(a, b) | Ambil yang lebih kecil | width: min(100%, 600px) |
max(a, b) | Ambil yang lebih besar | font-size: max(16px, 2vw) |
clamp(min, ideal, max) | Ideal, tapi dibatasi minimum dan maksimum | font-size: clamp(1.5rem, 4vw, 3rem) |
clamp() sangat berguna untuk teks yang membesar mengikuti layar tapi tidak pernah terlalu kecil atau terlalu besar, tanpa media query.
Beri nama variabel berdasarkan peran, bukan nilai: --warna-utama lebih baik daripada --hijau.