Fungsi

Podcast CSS - 020: Fungsi

Sejauh ini, Anda telah mempelajari beberapa fungsi CSS. Dalam modul grid, Anda telah diperkenalkan dengan minmax() dan fit-content(), yang membantu Anda mengukur elemen. Dalam modul warna, Anda telah diperkenalkan dengan rgb() dan hsl(), yang membantu Anda menentukan warna.

Seperti banyak bahasa pemrograman lainnya, CSS memiliki banyak fungsi bawaan yang dapat Anda akses kapan pun Anda membutuhkannya.

Setiap fungsi CSS memiliki tujuan tertentu. Dalam pelajaran ini, Anda akan mendapatkan ringkasan umum, sehingga memberi Anda pemahaman yang jauh lebih baik tentang tempat dan cara menggunakannya.

Apa yang dimaksud dengan fungsi?

Fungsi adalah potongan kode mandiri yang bernama yang menyelesaikan tugas tertentu. Fungsi diberi nama sehingga Anda dapat memanggilnya dalam kode dan meneruskan data ke fungsi. Hal ini dikenal sebagai meneruskan argumen.

Diagram fungsi seperti yang dijelaskan di atas

Banyak fungsi CSS merupakan fungsi murni, yang berarti jika Anda meneruskan argumen yang sama ke dalamnya, fungsi tersebut akan selalu memberikan hasil yang sama, terlepas dari apa yang terjadi dalam kode Anda lainnya. Fungsi ini akan sering dihitung ulang saat nilai berubah di CSS Anda, serupa dengan elemen lain dalam bahasa, seperti nilai bertingkat yang dikomputasi seperti currentColor.

Dalam CSS, Anda hanya dapat menggunakan fungsi yang disediakan, bukan menulisnya sendiri, tetapi fungsi tersebut dapat disusun bertingkat dalam satu sama lain dalam beberapa konteks, sehingga memberinya lebih banyak fleksibilitas. Kita akan membahasnya secara lebih detail nanti dalam modul ini.

Pemilih fungsional

.post :is(h1, h2, h3) {
    line-height: 1.2;
}

Anda telah mempelajari pemilih fungsional di modul class pseudo yang memerinci fungsi seperti :is() dan :not(). Argumen yang diteruskan ke fungsi ini adalah pemilih CSS, yang kemudian dievaluasi. Jika ada kecocokan dengan elemen, bagian lain dari aturan CSS akan diterapkan pada elemen tersebut.

Properti khusus dan var()

:root {
    --base-color: #ff00ff;
}

.my-element {
    background: var(--base-color);
}

Properti kustom adalah variabel yang memungkinkan Anda membuat token nilai dalam kode CSS. Properti khusus juga terpengaruh oleh jenjang yang berarti properti tersebut dapat dimanipulasi atau didefinisikan ulang secara kontekstual. Properti kustom harus diawali dengan dua tanda hubung (--) dan peka huruf besar/kecil.

Fungsi var() menggunakan satu argumen yang diperlukan: properti kustom yang Anda coba tampilkan sebagai nilai. Dalam cuplikan di atas, fungsi var() memiliki --base-color yang diteruskan sebagai argumen. Jika --base-color ditentukan, var() akan menampilkan nilainya.

.my-element {
    background: var(--base-color, hotpink);
}

Anda juga dapat meneruskan nilai deklarasi penggantian ke dalam fungsi var(). Artinya, jika --base-color tidak dapat ditemukan, deklarasi yang diteruskan akan digunakan, yang dalam kasus contoh ini adalah warna hotpink.

Fungsi yang menampilkan nilai

Fungsi var() hanyalah salah satu fungsi CSS yang menampilkan nilai. Fungsi seperti attr() dan url() mengikuti struktur yang mirip dengan var()— Anda meneruskan satu atau beberapa argumen dan menggunakannya di sisi kanan deklarasi CSS.

a::after {
  content: attr(href);
}

Fungsi attr() di sini mengambil konten atribut href dari elemen <a> dan menyetelnya sebagai content dari elemen pseudo ::after. Jika nilai atribut href dari elemen <a> berubah, hal ini akan otomatis tercermin dalam atribut content ini.

.my-element {
    background-image: url('/path/to/image.jpg');
}

Fungsi url() mengambil URL string dan digunakan untuk memuat gambar, font, dan konten. Jika URL yang valid tidak diteruskan atau resource yang ditunjuk URL tidak dapat ditemukan, tidak ada yang akan ditampilkan oleh fungsi url().

Fungsi warna

Anda telah mempelajari semua hal tentang fungsi warna dalam modul color. Jika Anda belum membacanya, sebaiknya Anda melakukannya.

Beberapa fungsi warna yang tersedia di CSS adalah rgb(), rgba(), hsl(), hsla(), hwb(), lab(), dan lch(). Semua ini memiliki bentuk yang serupa di mana argumen konfigurasi diteruskan dan warna dikembalikan.

Ekspresi matematika

Seperti banyak bahasa pemrograman lainnya, CSS memberikan fungsi matematis yang berguna untuk membantu berbagai jenis kalkulasi.

calc()

Dukungan Browser

  • 26
  • 12
  • 16
  • 7

Sumber

Fungsi calc() menggunakan satu ekspresi matematika sebagai parameternya. Ekspresi matematika ini dapat berupa campuran jenis, seperti panjang, angka, sudut, dan frekuensi. Unit juga dapat dicampur.

.my-element {
    width: calc(100% - 2rem);
}

Dalam contoh ini, fungsi calc() digunakan untuk menetapkan ukuran lebar elemen sebesar 100% dari elemen induknya, lalu menghapus 2rem dari nilai yang dihitung tersebut.

:root {
  --root-height: 5rem;
}

.my-element {
  width: calc(calc(10% + 2rem) * 2);
  height: calc(var(--root-height) * 3);
}

Fungsi calc() dapat ditempatkan di dalam fungsi calc() lainnya. Anda juga dapat meneruskan properti kustom dalam fungsi var() sebagai bagian dari ekspresi.

min() dan max()

Dukungan Browser

  • 79
  • 79
  • 75
  • 11.1

Sumber

Fungsi min() menampilkan nilai komputasi terkecil dari satu atau beberapa argumen yang diteruskan. Fungsi max() melakukan hal yang sebaliknya: mendapatkan nilai terbesar dari satu atau beberapa argumen yang diteruskan.

.my-element {
  width: min(20vw, 30rem);
  height: max(20vh, 20rem);
}

Dalam contoh ini, lebar harus berupa nilai terkecil antara 20vw —yaitu 20% dari lebar area pandang—dan 30rem. Tinggi harus merupakan nilai terbesar antara 20vh —yang merupakan 20% dari tinggi area pandang—dan 20rem.

{b>clamp()<b}

Dukungan Browser

  • 79
  • 79
  • 75
  • 13.1

Sumber

Fungsi clamp() menggunakan tiga argumen: ukuran minimum, ukuran ideal, dan maksimum.

h1 {
  font-size: clamp(2rem, 1rem + 3vw, 3rem);
}

Dalam contoh ini, font-size akan menyesuaikan berdasarkan lebar area pandang. Unit vw ditambahkan ke unit rem untuk membantu zoom layar, karena terlepas dari tingkat zoom, unit vw akan memiliki ukuran yang sama. Mengalikan dengan unit rem—berdasarkan ukuran font root— akan menghasilkan fungsi clamp() dengan titik kalkulasi relatif.

Anda dapat mempelajari fungsi min(), max(), dan clamp() lebih lanjut dalam artikel ini.

Bentuk

Properti CSS clip-path, offset-path, dan shape-outside menggunakan bentuk untuk memotong kotak Anda secara visual atau memberikan bentuk agar konten dapat mengalir.

Ada fungsi bentuk yang dapat digunakan dengan kedua properti ini. Bentuk sederhana seperti circle(), ellipse(), dan inset() mengambil argumen konfigurasi untuk mengukurnya. Bentuk yang lebih kompleks, seperti polygon() mengambil pasangan nilai sumbu X dan Y yang dipisahkan koma untuk membuat bentuk kustom.

.circle {
  clip-path: circle(50%);
}

.polygon {
  clip-path: polygon(0% 0%, 100% 0%, 100% 75%, 75% 75%, 75% 100%, 50% 75%, 0% 75%);
}

Seperti polygon(), ada juga fungsi path() yang menggunakan aturan pengisian SVG sebagai argumen. Hal ini memungkinkan bentuk yang sangat kompleks dapat digambar di alat grafis seperti Illustrator atau Inkscape, lalu disalin ke CSS.

Transformasi

Terakhir dalam ringkasan fungsi CSS ini adalah fungsi transformasi, yang memiringkan, mengubah ukuran, dan bahkan mengubah kedalaman elemen. Semua fungsi berikut digunakan dengan properti transform.

Rotasi

Dukungan Browser

  • 1
  • 12
  • 3,5
  • 3.1

Sumber

Anda dapat memutar elemen menggunakan fungsi rotate(), yang akan memutar elemen di sumbu tengahnya. Anda juga dapat menggunakan fungsi rotateX(), rotateY(), dan rotateZ() untuk memutar elemen pada sumbu tertentu. Anda dapat melewati satuan derajat, belokan, dan radian untuk menentukan tingkat rotasi.

.my-element {
  transform: rotateX(10deg) rotateY(10deg) rotateZ(10deg);
}

Fungsi rotate3d() menggunakan empat argumen.

Dukungan Browser

  • 12
  • 12
  • 10
  • 4

Sumber

3 argumen pertama adalah angka, yang menentukan koordinat X, Y, dan Z. Argumen keempat adalah rotasi yang, seperti fungsi rotasi lainnya, menerima derajat, sudut, dan belokan.

.my-element {
  transform: rotate3d(1, 1, 1, 10deg);
}

Skala

Dukungan Browser

  • 1
  • 12
  • 3,5
  • 3.1

Sumber

Anda dapat mengubah penskalaan elemen dengan transform dan fungsi scale(). Fungsi ini menerima satu atau dua angka sebagai nilai yang menentukan penskalaan positif atau negatif. Jika Anda hanya menentukan satu argumen angka, sumbu X dan Y akan memiliki skala yang sama dan menentukan keduanya adalah singkatan untuk X dan Y. Sama seperti rotate(), ada fungsi scaleX(), scaleY(), dan scaleZ() untuk menskalakan elemen pada sumbu tertentu.

.my-element {
  transform: scaleX(1.2) scaleY(1.2);
}

Selain itu, seperti fungsi rotate, terdapat fungsi scale3d(). Ini mirip dengan scale(), tetapi menggunakan tiga argumen: faktor skala X, Y, dan Z.

Terjemahan

Dukungan Browser

  • 1
  • 12
  • 3,5
  • 3.1

Sumber

Fungsi translate() memindahkan elemen sambil mempertahankan posisinya dalam alur dokumen. Mereka menerima nilai panjang dan persentase sebagai argumen. Fungsi translate() menerjemahkan elemen di sepanjang sumbu X jika satu argumen ditentukan, dan menerjemahkan elemen di sepanjang sumbu X dan Y jika kedua argumen ditentukan.

.my-element {
  transform: translatex(40px) translatey(25px);
}

Seperti halnya fungsi transformasi lainnya, Anda dapat menggunakan fungsi tertentu untuk sumbu tertentu menggunakan translateX, translateY, dan translateZ. Anda juga dapat menggunakan translate3d yang memungkinkan Anda menentukan terjemahan X, Y, dan Z dalam satu fungsi.

Kemiringan

Dukungan Browser

  • 1
  • 12
  • 3,5
  • 3.1

Sumber

Anda dapat mencondongkan elemen, menggunakan fungsi skew() yang menerima sudut sebagai argumen. Fungsi skew() berfungsi dengan cara yang sangat mirip dengan translate(). Jika Anda hanya menentukan satu argumen, argumen hanya akan memengaruhi sumbu X dan jika Anda menentukan keduanya, argumen akan memengaruhi sumbu X dan Y. Anda juga dapat menggunakan skewX dan skewY untuk memengaruhi setiap sumbu secara terpisah.

.my-element {
  transform: skew(10deg);
}

Perspektif

Dukungan Browser

  • 36
  • 12
  • 16
  • 9

Sumber

Terakhir, Anda dapat menggunakan properti perspective—yang merupakan bagian dari keluarga properti transformasi—untuk mengubah jarak antara pengguna dan bidang Z. Hal ini memberi kesan jarak dan dapat digunakan untuk menciptakan depth of field dalam desain Anda.

Contoh oleh David Desandro ini, dari artikelnya yang sangat berguna, menunjukkan cara penggunaannya, beserta properti perspective-origin-x dan perspective-origin-y untuk membuat pengalaman 3D yang benar-benar.

Fungsi, gradien, dan filter animasi

CSS juga menyediakan fungsi yang membantu Anda menganimasikan elemen, menerapkan gradien pada elemen tersebut, dan menggunakan filter grafis untuk memanipulasi tampilannya. Agar modul ini sesingkat mungkin, modul tersebut dibahas dalam modul tertaut. Semuanya mengikuti struktur yang mirip dengan fungsi yang didemonstrasikan dalam modul ini.

Menguji pemahaman Anda

Menguji pengetahuan Anda tentang fungsi

Karakter apa yang dapat diidentifikasi oleh fungsi CSS?

[]
Karakter ini untuk array dalam JavaScript.
{}
Karakter ini menggabungkan aturan dalam CSS.
()
Fungsi menggunakan karakter ini untuk mengemas argumen, ya.
::
Karakter ini ditujukan untuk elemen pseudo di CSS.
:
Karakter ini ditujukan untuk class pseudo di CSS.

CSS memiliki fungsi matematika bawaan?

Benar
Ada banyak sekali, dan lebih banyak lagi yang ditambahkan ke spesifikasi dan {i>browser<i}!
Salah
Coba lagi.

Fungsi calc() dapat ditempatkan di dalam calc() lain seperti font-size: calc(10px + calc(5px * 3));

Benar
🎉
Salah
Coba lagi.

Manakah dari hal berikut yang merupakan fungsi bentuk CSS?

ellipse()
🎉
square()
Coba lagi.
circle()
🎉
rect()
Coba lagi.
inset()
🎉
polygon()
🎉