CSS Functions — CSS

Pengen kotak yang lebarnya "100% dikurangi 250px sidebar"? Pengen tulisan yang besarnya menyesuaikan layar (kecil di HP, besar di desktop) tanpa media query?…

CSS bisa berhitung sendiri. calc(), min(), max(), dan clamp() adalah function (nama, lalu tanda kurung berisi masukan) yang menghasilkan sebuah ukuran, dan browser menghitungnya ulang tiap kali ruangnya berubah. Gunanya buat ukuran yang bergantung pada ruang, misalnya "lebar sisa sesudah sidebar".

🧪 Tebakan cepat: width: calc(100%-250px) tanpa spasi, jalan gak? Tebak dulu, jawabannya ada di bagian "Berhitung dengan calc()".

Berhitung dengan calc()

<div class="layout">
  <aside class="sidebar">Sidebar</aside>
  <div class="content">Konten</div>
</div>

<style>
.layout { display: flex; }
.sidebar { width: 250px; }
.content { width: calc(100% - 250px); }
</style>

Hasilnya, kalau .layout selebar 1000px, .content jadi 750px. Kalau .layout menyempit jadi 600px, .content ikut jadi 350px. Sidebar tetap 250px, konten mengisi sisanya.

Jawaban tebakan: gak jalan. Tanda + dan - di dalam calc() wajib diapit spasi. Tanpa spasi, -250px dibaca sebagai angka negatif, bukan pengurangan, jadi seluruh nilainya gak valid dan dibuang browser. Tulis calc(100% - 250px).

Ambil yang terkecil atau terbesar: min() dan max()

.kartu { width: min(400px, 100%); }
.menu { width: max(200px, 20%); }

Namanya terasa kebalik: min() memasang batas atas (paling lebar 400px), max() memasang batas bawah (paling sempit 200px).

Jepit di antara dua batas: clamp()

.judul { font-size: clamp(1rem, 4vw, 3rem); }

clamp() berisi tiga nilai: batas bawah, nilai ideal, batas atas.

Hasilnya, di layar 1000px, 4vw = 40px, masih di antara batas, jadi hurufnya 40px. Di layar 300px, 4vw = 12px, terlalu kecil, jadi dipakai 16px. Di layar 1600px, 4vw = 64px, terlalu besar, jadi dipakai 48px. Judul membesar mengikuti layar tanpa media query, tapi gak pernah kekecilan atau kebesaran.

⚠️ Jebakan yang sering ketemu

TL;DR: calc(100% - 250px) berhitung dan boleh campur satuan, asal + dan - diapit spasi. min() memakai nilai terkecil, jadi bikin batas atas. max() memakai nilai terbesar, jadi bikin batas bawah. clamp(1rem, 4vw, 3rem) menjepit nilai ideal di antara batas bawah dan batas atas.

Yang akan kamu pelajari